JS 对象面试题

对象是通过new操作符构建出来的,所以对象之间不相等,除引用以外

console.log([1, 2, 3] === [1, 2, 3]) // false

对象要注意引用类型

var obj1 = {a:1}
var obj2 = obj1
console.log(obj1 === obj2) //true

对象的key都是字符串类型,'[object Object]'

var o = {b: 'bbb'}
var obj1 = {a: 1, '张三':'你好'}
obj1[o] = '123'
for(var k in obj1){
    console.log(k, obj1[k], typeof k);
}
// a 1 string
// 张三 你好 string
// [object Object] 123 string

对象查找某个属性|方法

每个对象都是由构造函数创建(new)的,可以通过constructor属性找到对象的构造函数

function Fun(){}
let obj = new Fun()
console.log(obj.constructor) // [Function: Fun]

function Arr(){}
let arr = new Arr()
console.log(arr.constructor) // [Function: Arr]

1.每一个函数都自带一个prototype(原型),注意对象拥有__proto__

2.new Fun该Fun构造函数的原型指向于对象(new Fun)的原型

function Fun(){}
let obj = new Fun()
console.log(obj.__proto__===Fun.prototype) // true

面试题一

var obj1 = {a: 'hello'}
var obj2 = obj1
obj2.a = 'world'
console.log(obj1) // {a: 'world'}

(function(){
    console.log(a);  //undefined
    var a = 1;
})()

面试题二

因为b和c都是对象,当它们成为a的key的时候都是'[object Object]',所以a[c]会覆盖掉a[b]

var a = {}
var b = {key:'a'}
var c = {key:'c'}
a[b] = '123'
a[c] = '456'
console.log(a[b]); //456
console.log(a); //{ '[object Object]': '456' }

面试题三

找a属性的优先级(原型链)

对象本身 > 构造函数本身 > 对象原型上找 > 构造函数原型上找

obj.a > this.a > obj.__proto__.a > Fun.prototype.a

function Fun(){
    this.a = '在Fun函数中添加的a'
}
Fun.prototype.a = '这是Fun函数原型添加的a'
let obj = new Fun()
obj.a = "在obj添加的a"
obj.__proto__.a = "在obj原型上添加的a"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值