- 使用
Object.prototype.toString()
可以判断对象的类型 第二个就是该值的构造函数
Object.prototype.toString.call(2) // "[object Number]"
Object.prototype.toString.call('') // "[object String]"
Object.prototype.toString.call(true) // "[object Boolean]"
Object.prototype.toString.call(undefined) // "[object Undefined]"
Object.prototype.toString.call(null) // "[object Null]"
Object.prototype.toString.call(Math) // "[object Math]"
Object.prototype.toString.call({}) // "[object Object]"
Object.prototype.toString.call([]) // "[object Array]"
改造一哈
var type = function (o){
var s = Object.prototype.toString.call(o);
return s.match(/\[object (.*?)\]/)[1].toLowerCase();
};
['Null',
'Undefined',
'Object',
'Array',
'String',
'Number',
'Boolean',
'Function',
'RegExp'
].forEach(function (t) {
type['is' + t] = function (o) {
return type(o) === t.toLowerCase();
};
});
type.isObject({}) // true
type.isNumber(NaN) // true
type.isRegExp(/abc/) // true
-
Object.keys()
&&Object.getOwnPropertyNames()
两个都可以用来遍历对象的属性。只有当两个传入参数是不可枚举的属性的时候 返回不一样 因为getOwnPropertyNames
会遍历全部属性。keys 会根据enumerable
描述来遍历。
var a = ['Hello', 'World'];
Object.keys(a) // ["0", "1"]
Object.getOwnPropertyNames(a) // ["0", "1", "length"]
关于属性描述对象的
{
value: 123, // 属性值
writable: false, // 是否可写
enumerable: true, // 是否可以遍历
configurable: false, // 可配置性
get: undefined, // 取值函数 和value 不能同时存在
set: undefined // 存值函数
}
getOwnPropertyDescriptor
getOwnPropertyNames
defineProperty
propertyIsEnumerable
- 拷贝冻结
preventExtensions
isExtensible
seal
isSealed
freeze
isFrozen
不能新增 、 不行新增 删除 、不能新增 删除 修改
网友评论