任何人都可以用简单的词语解释为什么JavaScript表达
123.unexistingProperty;
引发错误,而
var v = 123;
v.unexistingProperty;
(123).unexistingProperty;
true.unexistingProperty;
"".unexistingProperty;
[].unexistingProperty;
{}.unexistingProperty;
不?
这与原型设计或语言的某些原理有关吗?
P.S。不仅仅是假设,这在动态生成的代码上实现eval()
时会出现问题。
答案 0 :(得分:4)
这与原型设计有关吗
不,原因是Javascript不允许您直接在数字文字上访问属性。
例如,这不会起作用:
123.unexistingProperty;
但这会奏效:
(123).unexistingProperty;
问题在于,可以以10.5
的形式编写数字,这意味着点不能用于访问属性。因此,您必须在括号之间换一个数字来调用数字上的属性。
示例:
Number.prototype.fun = function () { return "Fun" }
(100).fun()
(10.5).fun()