【发布时间】:2010-10-28 19:07:47
【问题描述】:
如果您查看 ECMAScript 3 规范,您会发现原始值类型 Null 和 Undefined 没有伴随的 Null 和 Undefined 对象。
>> Null
ReferenceError: Null is not defined
其他原始值类型 Number、String 和 Boolean 类型确实具有随附的 Number、String 和 Boolean 对象,您可以从全局范围引用它们。
>>Number
function Number() { [native code] }
>>Boolean
function Boolean() { [native code] }
这些原始值类型的目的是为它们各自的原始值类型提供toString和valueOf等方法:
>>var n = 1;
>>n.toString();
"1"
与
相同>>var n = 1;
>>Number.prototype.toString.call(n);
"1"
布尔值和字符串也可以这样工作:
>>var b = true;
>>b.toString();
"true"
>>Boolean.prototype.toString.call(b);
"true"
当您尝试混合类型时,您可以看到原始值对象正在使用其随附对象的方法:
>>Boolean.prototype.toString.call(n);
TypeError: Boolean.prototype.toString is not generic
>>Number.prototype.toString.call(b)
TypeError: Number.prototype.toString is not generic
对于布尔和字符串字面量类型来说足够有趣,您可以直接从字面量中调用这些方法:
>>true.toString();
"true"
>>Boolean.prototype.toString.call(true)
"true"
>>"moo".toString();
"moo"
>>String.prototype.toString.call("moo")
"moo"
原始值 null 和 undefined,因为它们没有伴随的 Null 和 Undefined 对象不能做这些事情:
>>Null
ReferenceError: Null is not defined
>>null.toString()
TypeError: Cannot call method 'toString' of null
原始值类型数字的行为类似于两者的混合。如果直接使用 Number 的原型对象的方法,则可以在字面量上调用 toString:
>>Number.prototype.toString.call(1);
"1"
但是你不能像使用字符串和布尔值那样从文字本身访问方法:
>>1.toString()
SyntaxError: Unexpected token ILLEGAL
为什么数字字面量的行为与布尔值和字符串不同,即使有数字对象?
【问题讨论】:
-
哦,好点。不确定。另一个帖子有很好的信息。谢谢!
标签: javascript