我目前正在阅读'Singe Page Web Applications'
本书。我遇到了以下示例:
// This is single pass encoder for html entities and handles
// an arbitrary number of characters
encodeHtml = function ( input_arg_str, exclude_amp) {
var input_str = String( input_arg_str), regex, lookup_map;
...
return input_str.replace(regex, function ( match, name ){
return lookup_map[ match ] || '';
});
};
我想知道,使用带有参数String()
的函数input_arg_str
的目的是什么。我知道通过使用String()
函数,我可以将不同的对象转换为字符串,但我从未使用String()
遇到过这样的特性。
我很好奇你对此的看法,并且非常感谢你的帮助。
答案 0 :(得分:5)
@Amit Joki's answer是正确的,但是有几种方法可以将对象转换为字符串,为什么要使用String(...)
?
我猜这里的主要原因是它安全地处理了null
和undefined
,而.toString
显然会失败。
String(undefined) // "undefined"
String(null) // "null"
简而言之,将对象转换为字符串比.toString
更具防御性。以下是关于MDN的说明:
可以使用
String
作为“更安全”的toString
替代品 虽然它通常仍会调用基础toString
,但它也是 适用于null和undefined。
我相信你会得到与字符串连接相同的结果:
var input_str = '' + input_arg_str; // also handles `null` and `undefined`
答案 1 :(得分:0)
不能说我曾经找到过使用它的理由,但是MDN的确表明字符串文字和字符串对象之间存在一些细微差别(强调我的):
请注意,JavaScript区分String对象和原始字符串值。 (布尔和数字也是如此。)
字符串文字(用双引号或单引号表示)和从非构造函数上下文中的String调用返回的字符串(即,不使用new关键字)是原始字符串。 JavaScript会自动将基元转换为String对象,因此可以对原始字符串使用String对象方法。在要在原始字符串上调用方法或发生属性查找的上下文中,JavaScript将自动包装字符串原语并调用方法或执行属性查找。
使用eval时,String基元和String对象也会给出不同的结果。传递给eval的基元被视为源代码;通过返回对象,将String对象视为所有其他对象。
由于这些原因,当代码遇到原始字符串时遇到String对象时,代码可能会中断,尽管通常作者不必担心区别。
来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String
正如其他人所说,在您发布的代码的上下文中,它确实确保将input_arg_str
传递的任何内容转换为实际字符串。