Javascript在类型和类型转换方面有很多"技巧",所以我想知道这两种方法是否相同,或者是否存在一些使它们不同的极端情况?
CMS*_*CMS 112
它们并不完全相同,实际上,作为函数调用的String构造函数(您的第一个示例),最后会调用toString
传递的对象的方法,例如:
var o = { toString: function () { return "foo"; } };
String(o); // "foo"
Run Code Online (Sandbox Code Playgroud)
另一方面,如果标识符引用null
或undefined
,您不能使用该toString
方法,它将给您一个TypeError
例外:
var value = null;
String(null); // "null"
value.toString(); // TypeError
Run Code Online (Sandbox Code Playgroud)
String
被称为函数的构造函数大致相当于:
value + '';
Run Code Online (Sandbox Code Playgroud)
Object- to- Primitive中的类型转换规则详细描述了规范,即[[DefaultValue]]
内部操作.
简要总结一下,从Object- to- String转换时,采取以下步骤:
toString
方法.
result
是原始的,则返回result
,否则转到步骤2.valueOf
方法.
result
是原始的,则返回result
,否则转到步骤3.TypeError
.鉴于上述规则,我们可以举例说明所涉及的语义:
var o = {
toString: function () { return "foo"; },
valueOf: function () { return "bar"; }
};
String(o); // "foo"
// Make the toString method unavailable:
o.toString = null;
String(o); // "bar"
// Also make the valueOf method unavailable:
o.valueOf = null;
try {
String(o);
} catch (e) {
alert(e); // TypeError
}
Run Code Online (Sandbox Code Playgroud)
如果您想了解更多关于这个机制,我会建议看ToPrimitive
和ToString
内部操作.
我还建议你阅读这篇文章:
Jon*_*han 23
value.toString()
如果value
为null,将导致错误.String(value)
不应该.
例如:
var value = null;
alert(value.toString());
Run Code Online (Sandbox Code Playgroud)
会失败的,因为value == null
.
var value = null;
alert(String(value));
Run Code Online (Sandbox Code Playgroud)
应该显示一条消息"null"(或类似),但它不会崩溃.
归档时间: |
|
查看次数: |
27686 次 |
最近记录: |