1.in 运算符

语法:属性 in 对象;
返回值:Boolean
// 内置对象
console.log("PI" in Math);  // 返回true
 
// 自定义对象
let carInfo = { make: "Honda", model: "Accord", year: 2020 };
console.log("make" in carInfo);   // 返回true


// in右操作数必须是一个对象值。例如,你可以指定使用String构造函数创建的字符串,但不能指定字符串文字。
let str = new String("javascript");
console.log("length" in str); // 返回true
str = "I is string";
console.log("length" in str); 
// 报错:Cannot use 'in' operator to search for 'length' in ……


// 只是将一个属性的值赋值为undefined,而没有删除它,则 in 运算仍然会返回true
let carInfo = { make: "Honda", model: "Accord", year: 2020 };
carInfo.make = undefined;
console.log("make" in carInfo); // 返回true

// 如果一个属性是从原型链上继承来的,in 运算符也会返回 true。
console.log("toString" in {}); // 返回true

注意:

(1)如果指定的属性在指定的对象或其原型链中,则 in 运算符 返回true。 
(2)可以判断内置对象上的属性。
(3)使用 delete 运算符删除了一个属性,则 in 运算符对所删除属性返回 false。
(4)将一个属性的值赋值为 undefined,而没有删除它,则 in 运算仍然会返回true。
(5)对于字符串的属性也可以判断,只是必须是字符串对象 new String() 创建的字符串。

2.对象.hasOwnProperty('属性')

语法:对象.hasOwnProperty('属性');
返回值:Boolean
使用场景:只判断自身属性
提醒:和原型没关系 ,不会查找原型上的属性
// 自定义对象
let carInfo = { make: "Honda", model: "Accord", year: 2020 };
console.log(obj.hasOwnProperty('make'));  //  true
console.log(obj.hasOwnProperty('model')); // true
console.log(obj.hasOwnProperty('price')); // false
console.log(obj.hasOwnProperty('toString')); // false

// 内置对象
console.log(Math.hasOwnProperty('PI')); // true

3.点( . )或者方括号( [ ] )

语法: obj.属性 != undefined 或 obj['属性'] != undefined
返回值:Boolean
提醒1:可以查找原型上的属性
提醒2:不能用在对象的属性值存在,属性值为 undefined 的场景下。
// 自定义对象
let carInfo = { make: "Honda", model: "Accord", year: 2020 };
console.log(obj.make != undefined));  //  true
console.log(obj.['model'] != undefined); // true
console.log(obj.price != undefined); // false

// 内置对象

前端小菜
266 声望8 粉丝

努力可以改变能力