# javaScript语言精粹 
# 第三章 对象
- javaScript 数据类型
    1. 基础数据类型
        Number String Boolean Undefined Null Symbol(es6新增,表示独一无二的值)
        值不可变
        数据存储在栈(stack)区,占据空间小,大小固定,被频繁使用
    2. 引用数据类型
        Object Function Array 
        值是可变的
        同时保存在栈内存和堆内存,占据空间大,大小不固定,存储在堆内存,指向该引用数据类型的变量指针储存在栈内存
- 检验数据类型
    1. typeof
        (1) 返回一个表示数据类型的字符串  
            number boolean string symbol object undefined function
        (2) 不能判断array 和 null
        (3) 缺点 
            除 function 以外的对象都会被识别成 object
            解决方法 使用 instanceof 进行判断
    2. instanceof 
        (1) 检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上,即判断 A 是否是 B 的实例,若是,返回 true,否则返回 false
        A (object) instanceof B (constructor)
        (2) 缺点
            - 是否处于原型链上的判断方法不严谨
            - 无法判断字面量方式创建的基本数据类型
            - 无法检测 null 和 undefined
    3. constructor
        (1) 与 instanceof 相似,但检测 object 与 instanceof 不一样
        (2) 可以处理基本数据类型的检验
        (3) 缺点
            - 无法检验 null 和 undefined
            - 不稳定 在把类的原型进行重写过程中,可以会出现把之前的 constructor 给覆盖了,使得检验结果不准确
    4. object.prototype.toString.call()  最标准最常用(MDN)
- 对象
    数组、函数、正则表达式都是对象
    属性的容器
    属性  key: value
    无类别(class-free) 用于收集和管理数据
    可以包含其他对象
    允许继承另一对象的属性  可减少对象初始化的时间和内存消耗
- 3.1 对象字面量
    1. 定义  {} 中包含 0 或 多个 键值对(名/值)
    2. 属性名 标识符且不是保留字可不用引号括住属性名
        var stooge = {
            "first-name": 'Jerome', // 必须用引号括住
            "last-name": 'Howard'
        }
    3. 对象可嵌套
        var flight = {
            airline: "Oceanic",
            number: 815,
            departure: {
                IATA: "SYD",
                time: "2020-10-13 14:55",
                city: "Sydney"
            }
            arrival: {
                IATA: "LAX",
                time: "2020-10-14 10:42",
                city: "Los Angeles"
            }
        }
- 3.2 检索
    1. 检索对象中包含的值的方式  有引号的用 ["属性名"] 检索,没有的则用 "." 检索
        stooge["first-name"] 
        flight.departure.IATA
    2. 检索不存在的成员元素的值,返回undefined 
       检索undefined值会导致 typeError 异常   通过 && 运算符避免错误
        flight.equipment                             // undefined
        flight.equipment.model                       // throw "TypeError"
        flight.equipment && flight.equipment.model   // undefined
    3. || 运算符填充默认值
        var status = flight.status || "unknown"
        var middle = stooge["middle-name"] || "(none)"
- 3.3 更新
    对象中的值通过赋值语句更新
    若属性名存在    属性值被替换
    若属性名不存在  属性被扩展
- 3.4 引用
    对象通过引用传递,但不会被拷贝
- 3.5 原型
    每个对象都连接一个原型对象,并可从中继承属性
    对象字面量创建的对象都连接到 object.prototype (javaScript 标准的对象)
    object.beget() 创建一个使用原对象作为其原型的新对象
    原型连接更新时不起作用,检索值时才被使用
- 3.6 反射
    处理不需要的属性的方法:
        1. 程序检查并剔除函数值 (反射的目标是数据)
        2. object.hasOwnProperty() 对象拥有都有的属性,返回 boolean
            该方法不会检查原型链
            flight.hasOwnProperty('number')       // true
            flight.hasOwnProperty('constructor')  // false
- 3.7 枚举
    for in 语句  用来遍历一个对象中的所有属性名
- 3.8 删除
    (1) delete 运算符 删除对象的属性,不会触及原型链中对象
    (2) 删除对象的属性 可能浮现原型链的属性
        another_stooge.nickname  // 'Moe'
        // 删除 another_stooge 的 nickname 属性,暴露出原型的 nickname 属性
        delete another_stooge.nickname
        another_stooge.nickname  // 'Curly'
- 3.9 减少全局变量污染
    javaScript 易保存定义的所有应用资源的全局变量
    全局变量 削弱程序的灵活性
    1. 只创建唯一一个全局变量,并定义该变量为当前应用容器,把其他全局变量追加在该命名空间下
        var MYAPP = {}
        MYAPP.stooge = {
            "first-name": 'Jerome', 
            "last-name": 'Howard'
        }
        MYAPP.flight = {
            airline: "Oceanic",
            number: 815,
            departure: {
                IATA: "SYD",
                time: "2020-10-13 14:55",
                city: "Sydney"
            }
            arrival: {
                IATA: "LAX",
                time: "2020-10-14 10:42",
                city: "Los Angeles"
            }
        }
    2. 使用闭包将信息隐藏起来
    
## 本章难点(解答见其他文章)
    1. javaScript 的数据类型和数据类型检验
    2. 原型与原型链
    3. 减少全局变量污染方法
    4. 闭包

你想了解的《javaScript语言精粹》(三)的更多相关文章

  1. 《JavaScript语言精粹》小记

    一.前言 以下内容均摘自<JavaScript语言精粹>一书,本人在读这本书时,发现作者诠释JavaScript很犀利,特别是数组部分,固记录下来,想和大家分享下. 随笔主要包含两大部分: ...

  2. 《JavaScript语言精粹》之函数化

    写在前面 看到好多书评和读书笔记都说<JavaScript语言精粹>字字珠玑,名不虚传..当然,要看得懂才行 其实个人认为函数化部分不是很好,举的例子不是十分恰当,之前看不懂是因为被成功误 ...

  3. 《JavaScript语言精粹》学习笔记

    一.in的用法 for...in 枚举一个对象的所有可枚举属性 检测DOM/BOM属性 if ("onclick" in elem) { // 元素支持onclick } if ( ...

  4. Javascript 语言精粹 代码片段合集

    Javascript 语言精粹 代码片段合集 标签:Douglas-Crockford Javascript 最佳实践 原文链接 更好的阅读体验 使用一个method 方法定义新方法 Function ...

  5. 读《JavaScript语言精粹》的一些感言

    最近看了<JavaScript语言精粹>,并且连着看了两遍,如果非要用言语形容的话,那我只能用4个字来形容:相见恨晚.其中的一些经验经过这么多年的摸索其实也了然,但是作者用这么浅薄的书把有 ...

  6. Javascript语言精粹之String常用方法分析

    Javascript语言精粹之String常用方法分析 1. String常用方法分析 1.1 String.prototype.slice() slice(start,end)方法复制string的 ...

  7. Javascript语言精粹之Array常用方法分析

    Javascript语言精粹之Array常用方法分析 1.Array常用方法分析 1.1 Array.prototype.sort() Javascript的默认比较函数假定被排序元素都是字符串,所以 ...

  8. javascript语言精粹mindmap

    javascript语言精粹mindmap 最近刚刚读完<javascript语言精粹>,感觉其中的内容确实给用js作开发语言的童鞋们提了个醒——js里面坑很多啊 不过,我也并不完全认同书 ...

  9. 读阮一峰对《javascript语言精粹》的笔记,我有疑问。

    <javascript语言精粹>是一本很棒的书籍,其中作者在附录列出了12种他所认为的javascript语言中的糟粕. 我最近开始跟读前端前辈的博客,其中读到了阮一峰的<12种不宜 ...

随机推荐

  1. 用Python写一个随机数字生成代码,5行代码超简单

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 第一步,安装 random 库 random库是使用随机数的Python标准库 ...

  2. 图像通道、RGB与色彩体系

    通道(Channels) 图像的通道指的是什么?是不是灰度图的通道数为1,彩色图的通道为3 ? 图像通道,在RGB色彩模式下就是指那单独的红色.绿色.蓝色部分.也就是说,一幅完整的图像,是由红色绿色蓝 ...

  3. UEFI、BIOS、GPT、MBR等概念的辨析

    (本文转移自本人的旧博客) 从各个地方包括知乎,Wiki,CSDN搜索到的一些整理,这些概念极易混淆. 先说互相的关系 BIOS和UEFI是两种固件接口标准 MBR和GPT是两种分区表 Legacy模 ...

  4. 案例:ADG环境遇到redo日志member路径有误以及RMAN-6571错误

    最近先后帮客户做了两套从虚拟化环境到物理机的数据库迁移,都是Linux系统,Oracle 11.2.0.4的RAC,最终选定ADG方案实现迁移,简单高效. 在之前的文章Oracle 11g ADG 部 ...

  5. bind,call,apply模拟实现

    首先,三者第一个参数都为this指向 区别 bind返回的是一个函数体 call和apply会直接执行,但是call参数需要一个一个进行传递,apply的第二个参数是一个数组 实现 bind 简单实现 ...

  6. Java-Collection和Map

    创建博客的目的主要帮助自己记忆和复习日常学到和用到的知识:或有纰漏请大家斧正,非常感谢! 之前面试,被问过一个问题:List和Set的区别. 主要区别很明显了,两者都是数组形式存在的,继承了Colle ...

  7. 发现新世界:神级浏览器插件TamperMonkey(暴力猴)

    由于谷歌浏览器各种受限 于是我就先使用火狐浏览器尝试此插件 步骤非常简单. 1.在火狐浏览器内打开如下网址:https://addons.mozilla.org/zh-CN/firefox/addon ...

  8. node.js conditionDebug VScode 配置

    launch.json { // 使用 IntelliSense 了解相关属性. // 悬停以查看现有属性的描述. // 欲了解更多信息,请访问: https://go.microsoft.com/f ...

  9. python中的运动控制函数

    运动控制函数:控制海龟走直线&走曲线 海龟向前行进,海龟走直线,参数d表示行进距离,也可以为负数,单位是像素 根据半径r绘制extent角度的弧形 r : 默认圆心在海龟左侧r 距离的位置 e ...

  10. hystrix总结之请求批量执行

    hystrix可以将同一个命令的多次执行合并到一起执行. public class HelloWorldCommandCollapser extends HystrixCollapser<Lis ...