第四章 表达式和运算符
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程序采用了异步事件驱动编程模型. 2 关于事件的重要定义 a 事件类型(event type) b 事件目标(event target) target ...
- JS权威指南读书笔记(六)
第十五章 脚本化文档 1 文档对象模型(DOM)是表示和操作HTML和XML文档内容的基础API. 2 文档节点的部分层次结构 Text和CDATASection都是characterData的子 ...
- JS权威指南读书笔记(五)
第十三章 Web浏览器中的JavaScript 1 在Html文档中嵌入客户端4种JS代码方法 a 内联方式,放置在<script>标签之间 b 放置在<script ...
- JS权威指南读书笔记(四)
第十章 正则表达式 1 正则表达式直接量定义为包含在一对斜杠(/)之间的字符 a /s$/ == new RegExp("s$") 2 直接量字符:所有字母和数字都是按照字 ...
- JS权威指南读书笔记(三)
第七章 数组 1 数组的实现是经过优化的,用数字索引来访问数组元素一般来说比访问常规的对象属性要快的多. 2 数组直接量的语法允许有可选的结尾的逗号,故[ ; ; ]只有两个元素而非三个. 3 调用构 ...
- JS权威指南读书笔记(一)
第一章 JavaScript概述 1 JS是一门高端的.动态的.弱类型的编程语言,非常适合面向对象和函数式的编程风格. 第二章 词法结构 1 JS程序是用Unicode字符集编写的. 2 JS是区 ...
- HTTP权威指南读书笔记
HTTP权威指南笔记 读书有两种境界,第一种境界是将书读薄,另一种是读厚.本篇文章就是HTTP权威指南的读书笔记,算是读书的第一重境界,将厚书读薄.文章对HTTP的一些关键概念做了比较详细的概述,通读 ...
- Hadoop权威指南学习笔记二
MapReduce简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.n ...
- css权威指南读书笔记
今天翻手机,翻到了许久之前看css权威指南时的笔记,遂移到博客中来. 1.属性选择器p.one class名为one的p元素p[class][name] 含有class和name属性的p元素p[cla ...
随机推荐
- ECMAScript 6.0基础入门教程
ECMAScript 6.0基础入门教程 转:https://blog.csdn.net/hexinyu_1022/article/details/80778727 https://blog.csdn ...
- Flutter生命周期
生命周期是一个组件加载到卸载的整个周期,熟悉生命周期可以让我们在合适的时机做该做的事情, flutter中的State生命周期和android以及React Native的生命周期类似. 大致可以分为 ...
- typeScript模块<一>
/*模块 模块的的概念 模块导出的几种方法 1.export 导出声明 2.export 导出语句 3.export default 4.import导入模块 模块化封装上一讲的DB库 */ /* 模 ...
- Spring5源码分析之Bean生命周期
Spring Bean生命周期的构成 Bean的完整生命周期经历了各种方法调用,这些方法可以划分为以下几类: Bean自身的方法: 这个包括了Bean本身调用的方法和通过配置文件中<bean&g ...
- Spring cloud微服务安全实战-6-5jwt改造之日志及错误处理(1)
在代码里,我们没有认证或者授权的filter.认证和授权的工作现在基本上完全由Spring Security的过滤器接管了. 本节就来看下 如何在Spring Security的过滤器链上加入我们自己 ...
- [错误处理]no matches found: connexion[swagger-ui] ?
问题原因: [ ] 中括号会影响shell脚本的执行 安装的时候在包名扩上双引号"" pip install "connexion[swagger-ui]" w ...
- iOS 控制输入框的字数?(textFliedView,textFlied等)
//控制输入框的字数 - (void)textViewDidChange:(UITextView *)textView { NSInteger number = [textView.text leng ...
- Django models中的\_\_repr__方法
先看个例子: class D(object): def __init__(self): pass def __str__(self): return "__str__" def _ ...
- 【Leetcode_easy】949. Largest Time for Given Digits
problem 949. Largest Time for Given Digits solution: class Solution { public: string largestTimeFrom ...
- SGE基本操作
SGE怎样工作: 1. 接受用户投放的任务 2. 在任务运行以前,将任务放到一个存储区域 3. 发送任务到一个执行设备,并监控任务的运行 4. 运行结束写回结果并记录运行日志 常用的SGE命令: 1. ...