1. js对象类型检测
1.typeof(只能区分基本类型和对象类型)
console.log(typeof(null)); //Object
console.log(typeof(false)); //boolean
console.log(typeof('str')); //String
console.log(typeof(11)); //number
console.log(typeof(undefined)); //undefined
console.log(typeof({})); //object
console.log(typeof([])); //Object
2.instanceof
//注意:判断时左边必须是一个对象,右边是对象类名或者构造函数
//常用方式
function Foo(){}
var f = new Foo()
console.log(f instanceof Foo) //true
//存在原形继承时
function Fa(){}
function Ch(){}
Ch.prototype = new Fa()
var f = new Ch()
console.log(f instanceof Ch) //true
console.log(f instanceof Fa) //true
//实现原理:
function instance_of(L, R) { //L 表示左表达式,R 表示右表达式
var O = R.prototype; // 取 R 的显示原型
L = L.__proto__; // 取 L 的隐式原型
while (true) {
if (L === null)
return false;
if (O === L) // 当 O 显式原型 严格等于 L隐式原型 时,返回true
L = L.__proto__;
}
}
//由上述实现的源码可知:
function Foo(){}
console.log(Object instanceof Object) //true
console.log(Foo instanceof Foo) //false
3.constructor
//typeof检测出是对象类型后可以使用constructor的方法进行类型检测,
//可以避免instanceof中使用Object做类型检测也依然是true的问题
function Foo(){}
var f = new Foo()
console.log((f).constructor === Foo) //true
console.log((f).constructor === Object) //false
//注意:constructor存在可以被改变问题
function Foo(){}
Foo.prototype = new Array()
var f = new Foo()
console.log((f).constructor === Foo) //false
console.log((f).constructor === Array) //true
4.Object.prototype.toString.call()
var a = []
console.log(Object.prototype.toString.call(a)) //[object Array]
var b = {}
console.log(Object.prototype.toString.call(b)) //[object Object]
2.JS对象属性
1.增加属性:
var obj = {}
obj.name = 'jj'
obj['age'] = 18
var address = 'addr'
obj[address] = '杭州'
console.log(obj.addr) //杭州
2.删除属性
var obj = {}
obj.name = 'jj'
obj.age = 18
delete obj.age
delete obj['age']
var s = 'age'
delete obj[s]
//delete 关键词不会删除被继承的属性
//如果删除了某个原型属性,则将影响到所有从原型继承的对象
3.检测属性
var obj = {
name: 'jj',
age: 18
}
console.log('name' in obj) //true
console.log(obj.hasOwnProperty('age')) //true
4.属性遍历
var obj = {
name: 'jj',
age: 18,
addr: '杭州'
}
for(var key in obj){
console.log(key)
console.log(obj[key])
console.log('------')
}