第四章 表达式和运算符
1 new调用构造函数的过程
    a 创建一个新的空对象
    b 设置空对象的_proto_指向构造函数原型prototype
    c 将这个新对象当做this的值来调用构造函数
    d 如果构造函数不返回一个对象值,则返回新对象
2 左值:表示存储在计算机内存的对象。
3 除数为0的运算结果是正无穷大或负无穷大,0/0的结果是NaN。
4 位运算符会将NaN、Infinity和-Infinity都转换为0。
5 in运算符希望它的左操作数是一个字符串或可以转换为字符串,右操作数是一个对象。
6 a op = b => a = a op b,只有在a包含具有副作用的表达式(比如函数调用和赋值操作)的时候,两者才不相等。
    a data[i++]*= 2 和 data[i++]=data[i++]*2是不等价的
7 关于eval()最重要的是,它使用了它的变量作用域环境。也就是说,它查找变量的值和定义新变量和函数的操作和局部作用域中的代码完全一样。
8 eval具有更改局部变量的能力,这对于JS优化器来说是一个大问题。在非严格模式下,允许var geval = eval,这样间接调用eval( geval(params)),则使用全局对象作为上下文作用域,并且无法读写、定义局部变量和函数。
9 typeof区分对象和原始值
10 delete的操作数是一个左值,否则将不进行任何操作同时返回true
 
第五章 语句
1 ;(空语句),JS解释器执行空语句时不会执行任何动作。
2 var 和 function都是声明语句,它们声明或定义变量或函数。
3 函数声明和函数定义的区别
    a 函数声明:函数的名字可以在函数内部和父作用域中取到(实质上是声明了一个变量,并将函数对象赋值给这个变量);
    b 函数定义:函数的名字只能在函数内部取到。
4 return和break语句都用于终止switch语句。
5 switch对每个case匹配操作执行恒等。
6 break 和 continue 是JS中唯一使用语句标签的语句。
7 try/catch/finally 语句是JS的异常处理机制。
8 with 语句用于临时扩展作用域链,with () {}。
 
第六章 对象
1 属性名可以是包含空字符串在内的任意字符串,但对象中不能存在两个同名的属性。
2 属性特性
    a 值(value)
    b 可写性(writable),表明是否可以设置该属性的值
    c 可枚举性(enumerable),表明是否可以通过for/in循环返回属性
    d 可配置性(configurable),表明是否可以删除或修改该属性
3 存储器属性特性
    读取(get) 写入(set)可枚举性和可配置性
4 对象特性
    a 对象的原型(prototype)
    b 对象的类(class)是一个标识对象类型的字符串
    c 对象的扩展标记(extensible)指明了是否可以向该对象添加新属性
5 可以通过对象直接量、关键字 new 和 Object.create() 函数来创建对象。
6 Object.create可以通过传入参数为null来创建一个没有原型的新对象,通过这种方式创建的对象不会继承任何东西,甚至不包括基础方法。
7 属性赋值操作首先检查原型链,以此判断是否允许赋值操作。如果对象o继承一个只读属性x,那么赋值操作是不允许的。如果允许属性赋值操作,它也总是在原始对象上创建属性或者对已有的属性赋值。只有在查询属性时与继承有关,设置属性则与继承无关。有一个例外,如果o继承自属性x,而这个属性是一个具有setter方法的accessor属性,那么这时将调用setter方法,而不是给o创建一个属性x。需要注意的是,setter方法是由对象o调用的,而不是原型对象调用。
8 检测属性:可以通过in 运算符、hasOwnProperty() 和 propertyIsEnumerable() 方法完成
9 propertyIsEnumerable是hasOwnProperty的增强版,只有检测到自有属性且这个属性的可枚举性为true时它才返回true。
10 枚举属性:
    a 可以通过for/in 循环(可枚举的自有属性和继承属性)
    b Object.keys() (可枚举的自有属性)
    c Object.getOwnPropertyNames() (所有自有属性)
11 由getter 和 setter 定义的属性称为"存取器属性",也是可以继承的。
12 通过调用Object.getOwnPropertyDescriptor()可以获得某个对象特定属性的属性描述符。
13 通过调用Object.defineProperty()可以设置属性的特性。
14 可写性控制着对值特性的修改。
15 可配置性控制着对其他特性的修改(包括属性是否可以删除)。具体规则:
    a 如果属性(数据属性&存储器属性)是不可配置的,则不能修改可配置性和可枚举性;
    b 如果存储器属性是不可配置的,则不能修改其getter 和 setter 方法,也不能将它转换为数据属性;
    c 如果数据属性是不可配置的,则不能将它转换为存储器属性;
    d 如果数据属性是不可配置的,则不能将它的可写性从false修改为true,但是可以从true修改为false;
    e 如果数据属性是不可配置且不可写的,则不能修改它的值。然而可配置但不可写的属性的值是可以手动修改的(实际上是先将它标记为可写的,修改值后,再转换为不可写的)
    f 如果对象是不可扩展的,不能给它添加新属性。
16 通过调用isPrototypeOf() 检测一个对象是否是另一个对象的原型。
17 通过内置构造函数(Array Date等)创建的对象均有类属性。
18 Object.prototype.toString.call(o).slice(8, -1) => 类属性
19 对象可扩展性
    a Object.isExtensible() 是否可扩展
    b Object.preventExtensions() 转换为不可扩展的
    c Object.seal() 除了转换为不可扩展的,还将对象的所有自有属性设置为不可配置的
    d Objetct.freeze() 除了转换为不可扩展的,还将对象的属性设置为不可配置的,另外所有数据属性都设置为只读的(setter方法不收影响)
20 JSON.stringify() 和 JSON.parse() 序列化和还原对象。
 

JS权威指南读书笔记(二)的更多相关文章

  1. JS权威指南读书笔记(七)

    第十七章 事件处理 1 客户端JS程序采用了异步事件驱动编程模型. 2 关于事件的重要定义     a 事件类型(event type)     b 事件目标(event target) target ...

  2. JS权威指南读书笔记(六)

    第十五章 脚本化文档   1 文档对象模型(DOM)是表示和操作HTML和XML文档内容的基础API. 2 文档节点的部分层次结构 Text和CDATASection都是characterData的子 ...

  3. JS权威指南读书笔记(五)

    第十三章 Web浏览器中的JavaScript 1 在Html文档中嵌入客户端4种JS代码方法     a 内联方式,放置在<script>标签之间     b 放置在<script ...

  4. JS权威指南读书笔记(四)

    第十章 正则表达式 1 正则表达式直接量定义为包含在一对斜杠(/)之间的字符     a /s$/ == new RegExp("s$") 2 直接量字符:所有字母和数字都是按照字 ...

  5. JS权威指南读书笔记(三)

    第七章 数组 1 数组的实现是经过优化的,用数字索引来访问数组元素一般来说比访问常规的对象属性要快的多. 2 数组直接量的语法允许有可选的结尾的逗号,故[ ; ; ]只有两个元素而非三个. 3 调用构 ...

  6. JS权威指南读书笔记(一)

    第一章 JavaScript概述 1 JS是一门高端的.动态的.弱类型的编程语言,非常适合面向对象和函数式的编程风格.   第二章 词法结构 1 JS程序是用Unicode字符集编写的. 2 JS是区 ...

  7. HTTP权威指南读书笔记

    HTTP权威指南笔记 读书有两种境界,第一种境界是将书读薄,另一种是读厚.本篇文章就是HTTP权威指南的读书笔记,算是读书的第一重境界,将厚书读薄.文章对HTTP的一些关键概念做了比较详细的概述,通读 ...

  8. Hadoop权威指南学习笔记二

    MapReduce简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.n ...

  9. css权威指南读书笔记

    今天翻手机,翻到了许久之前看css权威指南时的笔记,遂移到博客中来. 1.属性选择器p.one class名为one的p元素p[class][name] 含有class和name属性的p元素p[cla ...

随机推荐

  1. Jmeter 时间函数工具汇总

    在使用Jmeter过程中,常使用的函数汇总 __time : 获取时间戳.格式化时间 ${__time(yyyy-MM-dd HH:mm:ss:SSS,time)}  :格式化生成时间格式 2018- ...

  2. JDK1.7 和JDK1.8同时存在设置默认的JDK

    最近学习SpringCloud需要安装JDK1.8 但是自己的项目在1.8的环境中运行不了 无论怎么修改使用cmd  中命令的java -version 都显示是jdk 1.8 将java home  ...

  3. Top 10 Machine Learning Algorithms For Beginners

    Linear Regression Logistic regression KNN Classification Support Vector Machine (SVM) Decision Trees ...

  4. 无法复制CSD内容,复制后出现一行长字符串解决

    先打开一个linux文件,然后把复制的内容放到linux文件中即可解决

  5. Linux使用sleep进行延迟实验

    sleep命令可以延迟脚本执行一段时间(以秒为单位).下面的命令使用tput和sleep从0开始计时到40秒: #/bin/bash echo Count: tput sc # 循环40s for c ...

  6. 修改ecshop的70种技巧

    1.如何修改网站”欢迎惠临本店”答复(dafu):languages\zh_cn\common.php文件中,$_LANG['welcome']=’欢迎惠临本店’:将他修改成你需要的字样. 2.如何修 ...

  7. 对ThreadLocal的理解

      参考文档:https://www.cnblogs.com/moonandstar08/p/4912673.html   一.定义:线程本地变量,每个线程中的变量相互独立,互不影响. 官方定义: 1 ...

  8. springboot maven 收发JSON

    先在pom.xml添加 json 库 <dependency> <groupId>com.alibaba</groupId> <artifactId>f ...

  9. docker ubuntu桌面

    docker run -it --rm -p 8080:80 dorowu/ubuntu-desktop-lxde-vnc

  10. 使用Wifi pineapple(菠萝派)进行Wi-Fi钓鱼攻击

    简介: WiFi Pineapple 是由国外无线安全审计公司Hak5开发并售卖的一款无线安全测试神器. 特性: 用作 Wi-Fi 中间人攻击测试平台 一整套的针对 AP 的渗透测试套件 基于 WEB ...