- typeof null 期望它返回"null"时,它错误地返回了"object"
这是JS中一直存在的一个bug,但是看起来它永远都不会被修复了。在网络上有太多的代码依存于这个bug,因此修复它将会导致更多的bug!
- object类型指的是一种复合值,你可以在它上面设定属性(带名称的位置),每个属性持有各自的任意类型的值。它也许是JavaScript中最有用的类型之一。
- 一个数组是一个object,它不使用特殊的带名称的属性/键持有(任意类型的)值,而是使用数字索引的位置。
- 函数也是object的子类型 —— typeof返回"function",这暗示着"function"是一种主要类型 —— 因此也可以拥有属性,但是你一般仅会在有限情况下才使用函数对象属性(比如foo.bar)
- 当你通过引用一个属性或方法(例如,前一个代码段中的a.toUpperCase())将一个像"hello world"这样的基本类型值当做一个object来使用时,JS自动地将这个值“封箱”为它对应的对象包装器(这个操作是隐藏在幕后的)。
- Truthy 与 Falsy。在你的JS程序中你将需要进行两种主要的值的比较:等价 和 不等价。任何比较的结果都是严格的boolean值(true或false),无论被比较的值的类型是什么。
- this的绑定方式。
1) 函数是通过 new 被调用的吗(new 绑定)?如果是,this 就是新构建的对象。
var bar = new foo()
2) 函数是通过 call 或 apply 被调用(明确绑定),甚至是隐藏在 bind 硬绑定 之中吗?如果是,this 就是那个被明确指定的对象。
var bar = foo.call( obj2 )
3) 函数是通过环境对象(也称为拥有者或容器对象)被调用的吗(隐含绑定)?如果是,this 就是那个环境对象。
var bar = obj1.foo()
4) 否则,使用默认的 this(默认绑定)。如果在 strict mode 下,就是 undefined,否则是 global 对象。
var bar = foo()