1

所以从对 JavaScript 的基本理解来看=====更快(在大多数情况下)(因为 === 不必执行类型转换)。

最近我看到有人为整个函数/对象/类设置了一组高范围的变量:

var val = {}; // some random object that never changes?
var Obj = {};

然后(可选地重复)稍后:

Obj[key] = val;

然后(可选地重复,并且可能与上面交织在一起)后来比较:

if ( Obj[key] === val ) {...}

我的问题是,为什么(如果是的话)它比完全跳过val并仅使用它更快/更好:

Obj[key] = true; // or = 1, or something?

// ... more code, then later checking:

if ( Obj[key] === true ) // or === 1 or just ( Obj[key] ) because basic existence evaluates to true

我假设使用true1所损失的性能比将对象与自身进行比较更差,但我想了解为什么?

谢谢!

4

1 回答 1

1

这不是为了性能,对象更好,因为它不能被“伪造”。考虑:

var RED = 1,
    GREEN = 2,
    BLUE = 3;

现在,如果您检查 some color === RED,它实际上不会检查,它只是检查是否color等于数字 1,无论是故意还是巧合。

现在在这个:

var RED = {},
    GREEN = {},
    BLUE = {};

当您这样做时color === RED,您实际上是在检查颜色是否为红色,因为对象标识不能是其他任何东西。

于 2013-09-19T04:54:28.413 回答