1

我可以通过做

var n1 = 1;

或者

var n1 = Number(1);

与字符串相同

var s1 = 'string1';

或者

var s1 = String('string1');

在什么情况下会想要使用全局对象而不是更简单的方法。

JavaScript 全局对象 String 和 Number 在编程时有用吗?

同样对于

Regexp, Boolean, Function

这些都可以使用适当的语法来实例化,有什么目的吗?

4

5 回答 5

2

让它们可用允许我们扩展它们。例如,如果浏览器没有实现它,您可以Array.isArray自己添加该方法。

Array.isArray = function( arr ) {
    return Object.prototype.toString.apply( arr ) === '[object Array]';
};

对于大多数 polyfill 来说,这很好。

另一个很好的例子是trim字符串方法。

String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g,'');
};

否则,真的没有其他用途。用 转换成数字更好,用+转换成字符串更好'' +,等等。

我经常使用的唯一一个是Regexp,因为它很方便new Regexp(保存在变量中,因为需要较少的转义或者因为它允许在多行中分解正则表达式)。

编辑:我只是想到了另一种用途:

arr.filter( Boolean ); // Removes falsy values from the array "arr"
arr.map( Number ); // Converts every element of the array to a Number
于 2012-09-04T18:13:13.077 回答
1

Number()作为函数调用时,它会对作为参数传递的值执行类型转换。对于String(). String(10)将数字转换10为字符串'10'

var n1 = 1;
// => 1

var n2 = 's';
// => 's'

但:

var n3 = Number(1);
// => 1

var n4 = Number('s');
// => NaN
于 2012-09-04T18:12:29.470 回答
1

来自MDN

Number 对象的主要用途是:

如果参数不能转换为数字,则返回 NaN。

在非构造函数上下文中(即,没有 new 运算符),Number 可用于执行类型转换。

更一般地说(我邀请您阅读 MDN 中其他包装类的文档),这些类用于执行类型转换或断言。

于 2012-09-04T18:13:03.247 回答
1

还有第三个:

var s1 = new String('string1');

速记var s1 = 'string'实际上是上面那行的速记。它们几乎相同。

你给的另一条线,

var s1 = String('string1');

, 实际上是一种类型转换。您正在将字符串类型转换为字符串,这是没有意义的。但你也可以写:

var s1 = String(10);

,在这种情况下,您将数字 10 类型转换为字符串,这显然与字符串到字符串的类型转换相反。

于 2012-09-04T18:14:40.080 回答
1

使用对象而不是基元时,有很多次和一些地方具有优势。

1)对象可以有方法。像"hello world".length将原始字符串“自动装箱”到对象一样简单,这样人们就可以使用长度属性。

2) 使用StringandNumber构造函数是转换为字符串/数字的一种方法,尽管通常有更好的方法。

于 2012-09-04T18:19:10.517 回答