我可以通过做
var n1 = 1;
或者
var n1 = Number(1);
与字符串相同
var s1 = 'string1';
或者
var s1 = String('string1');
在什么情况下会想要使用全局对象而不是更简单的方法。
JavaScript 全局对象 String 和 Number 在编程时有用吗?
同样对于
Regexp, Boolean, Function
这些都可以使用适当的语法来实例化,有什么目的吗?
我可以通过做
var n1 = 1;
或者
var n1 = Number(1);
与字符串相同
var s1 = 'string1';
或者
var s1 = String('string1');
在什么情况下会想要使用全局对象而不是更简单的方法。
JavaScript 全局对象 String 和 Number 在编程时有用吗?
同样对于
Regexp, Boolean, Function
这些都可以使用适当的语法来实例化,有什么目的吗?
让它们可用允许我们扩展它们。例如,如果浏览器没有实现它,您可以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
当Number()
作为函数调用时,它会对作为参数传递的值执行类型转换。对于String()
. String(10)
将数字转换10
为字符串'10'
var n1 = 1;
// => 1
var n2 = 's';
// => 's'
但:
var n3 = Number(1);
// => 1
var n4 = Number('s');
// => NaN
来自MDN:
Number 对象的主要用途是:
如果参数不能转换为数字,则返回 NaN。
在非构造函数上下文中(即,没有 new 运算符),Number 可用于执行类型转换。
更一般地说(我邀请您阅读 MDN 中其他包装类的文档),这些类用于执行类型转换或断言。
还有第三个:
var s1 = new String('string1');
速记var s1 = 'string'
实际上是上面那行的速记。它们几乎相同。
你给的另一条线,
var s1 = String('string1');
, 实际上是一种类型转换。您正在将字符串类型转换为字符串,这是没有意义的。但你也可以写:
var s1 = String(10);
,在这种情况下,您将数字 10 类型转换为字符串,这显然与字符串到字符串的类型转换相反。
使用对象而不是基元时,有很多次和一些地方具有优势。
1)对象可以有方法。像"hello world".length
将原始字符串“自动装箱”到对象一样简单,这样人们就可以使用长度属性。
2) 使用String
andNumber
构造函数是转换为字符串/数字的一种方法,尽管通常有更好的方法。