javascript对象和属性

栏目: Javascript 发布时间:2022-03-08

JavaScript 中所有变量都可以当作对象使用,除了两个例外 nullundefined

[1, 2, 3, 4].toString(); // '1,2,3,4'
true.toString(); // 'true'

function Foo() {}
Foo.bar = 'bar';
Foo.bar; // 'bar'

一个常见的误解是数字的字面值(literal)不能当作对象使用。这是因为 JavaScript 解析器的一个错误, 它试图将点操作符解析为浮点数字面值的一部分。

1.toString() // Uncaught SyntaxError: Invalid or unexpected token

有很多变通的写法。

1..toString() // 第 2 个点号可以正常解析
1 .toString() // 注意点号前面的空格
(1).toString() // 括号里的数字 1 先被计算

属性查找

当查找一个对象的属性时,JavaScript 会向上遍历原型链,直到找到给定名称的属性为止。

到查找到达原型链的顶部 - 也就是 Object.prototype - 但是仍然没有找到指定的属性,就会返回 undefined。

性能

如果一个属性在原型链的上端,则对于查找时间将带来不利影响。特别的,试图获取一个不存在的属性将会遍历整个原型链。

hasOwnProperty 函数

为了判断一个对象是否包含自定义属性而不是原型链上的属性, 我们需要使用继承自 Object.prototype 的 hasOwnProperty 方法。

// 修改Object.prototype
Object.prototype.bar = 1; 
var foo = {
  goo: undefined
};

foo.bar; // 1
'bar' in foo; // true

foo.hasOwnProperty('bar'); // false
foo.hasOwnProperty('goo'); // true

只有 hasOwnProperty 可以给出正确和期望的结果,这在遍历对象的属性时会很有用。 没有其它方法可以用来排除原型链上的属性,而不是定义在对象自身上的属性。

本文地址:https://www.tides.cn/p_js-object-property