第一章
使用内置对象创建的变量(不带关键词new),严格等于字面量
1 | var str1 = 'abc'; |
使用new创建的变量,松散等于字面量,不严格等于字面量
1 | var str1 = 'abc'; |
访问基本类型的属性时,javascript引擎会模拟创建一个临时对象来包围基本类型,属性访问之后引擎会立马丢弃这个临时对象。这正是“基本类型不是对象,但仍可以放问它的一些属性”的原因。
1 | var str = 'abc'; |
indexOf
使用方式为 str.indexOf(searchValue, fromIndex)
, searchValue
为要查询的字符串, fromIndex
第 二个参数为起始查询点。
特殊情况:
- 如果 searchValue为空白,即
indexOf()
,searchValue 会被当做字符串 undefined 。
1 | "0123undefined".indexOf(); // 4 |
- 如果 searchValue 为空字符串,结果取决于 fromIndex:
1 | "abc".indexOf(''); // 0 如果fromIndex为空白,或者小于等于0 ,返回 0 |
可以从一个Date减去另一个Date,两者的差值以毫秒返回。然而如果把两个日期相加,结果是第二个日期附加到第一个日期后面的一个字符串。
如果把两个Date对象相除,需要把Date转换为毫秒值,返回相除的结果。将两个日期相乘,会返回一个非常大的毫秒值。
1 | var firstDate = new Date(); |
lastIndexOf
是从尾部到头部进行搜索,如果给定搜索的起始位置(即第二个参数),则从起始位置向头部进行搜索,返回找到的第一个元素的索引。
1 | var arr = ['a','b','c','a']; |
splice
方法接受到的索引如果为负数,则从末尾开始对数组/字符串操作,-n
相当于从倒数第n个位置进行操作。如果没有接受到第二个参数,则一直删除到底。
1 | var arr = ['a','b','c']; |
第二章
dict模式:创建拥有一个空的原型的对象,以避免已有的属性可能会搞乱程序。
1 | var obj = {}; |
第三章
可以通过字面值函数为函数提供一个名称,但这个名称只能在函数内部用
1 | var fn = function name(){type of name}; |
使用slice
和call
可以将类数组或NodeList转换为数组。
1 | [].slice.call(arguments); |
第四章
继承一个对象的方式: Object.create()
、apply
1 | function Parent(){ |
让方法链化的关键一步是,在方法尾部返回对象(使用该方法的对象)的引用。
1 | function Book(){ |
第五章
NodeList
唯一可使用的属性为length,唯一方法为item。不能直接对NodeList
使用Array方法,比如push。
DOM的style
属性只能获取到内联样式,style标签以及样式表中的样式,无法通过.style
方式获取。可以使用getComputedStyle去获取元素所有当前生效的样式。
display:none
会从页面布局中完全删除元素,而visibility:hidden
只是视觉上隐藏了元素,仍然会影响其他元素的布局。
第八章
在JSON中,如果对象包含其他对象,其他对象会被转换为JSON的等价形式。
1 | var obj = {name:"obj"}; |
第九章
向SVG添加JavaScript,必须提供style属性。并且要把脚本包含在CDATA块中,否则XML会把<当做XML而不是脚本对待。
1 | <script type='text/ecmascript'> |
访问svg元素
1 | <object id='object' data='demo.svg'></object> |
Math.round
中间值(0.5)向较大数取值,所以Math.round(-1.5)
为-1,而不是-2
在获取画布的imageData时常常会发生如下错误:Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The canvas has been tainted by cross-origin data
增加一个img.crossOrigin = ''
即可解决这个问题。
video
元素有个timeupdate
事件,每200毫秒触发一次。
虽然NaN
不等于自身,但是对于使用NaN
作为键的Map对象,NaN
是和自身相等的:
1 | var myMap= new Map(); |
使用数组作为键的Map对象,必须使用完全相同的键才能获取到响应的键值:
1 | var arr = [1,2]; |
第十二章
通用模块定义UMD
1 | (function (global, factory) { |
某个package.json文件中,用npm remove
命令移出dependencies(或devDependencies)中的最后一项,属性dependencies并不会被一并删除,只是将其设为一个空值。
1 | "dependencies":{} |
第十三章
Worker 线程的一个缺点,就是并不是所有的内建对象或功能都能在所有的浏览器中可用。比如在旧版本的Firefox中,异步的FileReader不会在Worker线程中工作。
第十四章
Shadow DOM,即这部分 DOM 默认与外部 DOM 隔离,内部任何代码都无法影响外部。
Web Component https://jsfiddle.net/zhaohd/vfbnLeaz/
第十五章
要使用GET、POST 或HEAD之外的一个方法,必须对你的请求预检(preflight)。