JavaScript高级程序设计笔记
类型检测
typeof
操作符并不可靠,在判断引用类型如[]
,{}
,function(){}
以及null
的返回值都是object
- 对于
instanceof
来说,也存在不可靠的情况,它存在多个全局作用域,比如一个页面包含多个iframe
var isArray = value instanceof Array
看起来可以检测是否为数组,但是如果value是在另一个frame
中定义的数组,则isArray
为false
- 最好的解决办法利用
Object
原生的toString
方法,例子如下function isArray(value) { return Object.prototype.toString.call(value) === '[object Array]' }
- 但是使用
toString
检测非原生构造函数时都将返回[object Object]
- 所以可以利用这里来判断是否是原生的JSON
var isNativeJSON = window.JSON && Object.prototype.toString.call(JSON) == "[object JSON]"
防篡改对象
不可扩展对象
- 使用
Object.preventExtensions(object)
来阻止object
增加其他属性和方法 - 使用
Object.isExtensible(object)
来判断
密封的对象
- 使用
Object,seal(object)
来保护object
对象属性不可被添加和删除 - 使用
Object.isSealed(object)
来判断
冻结对象(最严格)
- 使用
Object.freeze()
来冻结对象,对象属性的[[writable]]
会被设置为false
- 使用
Object.isFrozen(object)
来判断