String(value) 与 value 之间的区别是什么。toString()
2022-08-30 02:37:23
Javascript在类型和类型转换方面有很多“技巧”,所以我想知道这两种方法是否相同,或者是否有一些角落情况使它们不同?
Javascript在类型和类型转换方面有很多“技巧”,所以我想知道这两种方法是否相同,或者是否有一些角落情况使它们不同?
它们并不完全相同,实际上,作为函数调用的 String 构造函数(您的第一个示例)将在末尾调用所传递对象的方法,例如:toString
var o = { toString: function () { return "foo"; } };
String(o); // "foo"
另一方面,如果标识符引用 或 ,则无法使用该方法,它将为您提供 TypeError
异常:null
undefined
toString
var value = null;
String(null); // "null"
value.toString(); // TypeError
作为函数调用的构造函数大致等效于:String
value + '';
从对象到基元的类型转换规则在规范 [[DefaultValue]]
内部操作中进行了详细描述。
简要总结一下,从对象转换为字符串时,将执行以下步骤:
toString
result
result
valueOf
result
result
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
}
如果你想更多地了解这个机制,我建议你看看ToPrimitive
和ToString
的内部操作。
我还建议阅读这篇文章:
value.toString()
如果 为 null 或未定义,将导致错误。 不应该。value
String(value)
例如:
var value = null;
alert(value.toString());
将失败,因为 .value == null
var value = null;
alert(String(value));
应该显示一条显示“null”(或类似)的消息,但它不会崩溃。