使用函数`String()`和函数参数的目的是什么?

时间:2014-04-30 13:37:54

标签: javascript

我目前正在阅读'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()遇到过这样的特性。

我很好奇你对此的看法,并且非常感谢你的帮助。

2 个答案:

答案 0 :(得分:5)

当然,

@Amit Joki's answer是正确的,但是有几种方法可以将对象转换为字符串,为什么要使用String(...)

我猜这里的主要原因是它安全地处理了nullundefined,而.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传递的任何内容转换为实际字符串。