1、对象是通过new操作符构建出来的,所以对象之间不相等
2、对象注意引用类型,如果是引用类型,就可能会相等
3、现在对象本身查找 -> 构造函数中找 -> 对象原型中找 -> 构造函数原型中找 -> 对象上一层原型…
1、对象是通过new操作符构建出来的,所以对象之间不相等
无论是
console.log( [1,2,3] == [1,2,3] )
还是
console.log( [1,2,3] === [1,2,3] )
结果都是false.
原因: 数组其实是对象类型中的一种,左边的数组看做是A人,右边的对象看做是B人,虽然俩人长一样,但是其实是不同的人
2、对象注意引用类型,如果是引用类型,就可能会相等
分析:这里属于是把obj1浅拷贝给你obj2,其实两者指向同一片内存区
var obj1 = {
'a': 1
}
var obj2 = obj1
console.log(obj1 === obj2) //true
另一个题目:
分析:
1、obj2引用obj2的地址
2、obj2.a改了,其实obj1也改了,因为是同一个地址
3、所以obj1是world
4、function有函数块级作用域
5、里面的a在输出下面声明赋值
6、声明提升,所以是undefined
var obj1 = {
a:'hello'
}
var obj2 = obj1;
obj2.a = 'world';
console.log(obj1); // { a: 'world' }
(function () {
console.log(a) //undefined
var a = 1
})();
这个题很离谱,我也第一次见
分析:
a[b] = ‘123’相当于是给a添加了一个
a = { [object, object] = ‘123’ }
然后a[c] = ‘456’
还是给a
a = { [object, object] = ‘456’ }
所以最后输出’456’
var a = {}
var b = {
key:'a'
}
var c = {
key:'c'
}
a[b] = '123'
a[c] = '456'
console.log( a[b] ) // 打印‘456’
3、现在对象本身查找 -> 构造函数中找 -> 对象原型中找 -> 构造函数原型中找 -> 对象上一层原型查找…