字面量值:用于创建大多数原生对象值,而不必使用new Foo()这样的方式。大多数情况下,字面量语法与使用new操作符的效果相同。但也有例外:Number(),String()和Boolean()。
举个例子:
var myNumber = new Number(11); //对象
var myNUmberLiteral = 11; //原始数值而非对象
var myString = new String('woman'); //对象
var myStringLiteral = 'woman'; //原始字符值而非对象
var myBoolean = new Boolean(false); //对象
var myBooleanLiteral = 'false'; //原始布尔值,而非对象
var myObject = new Object();
var myObjectLiteral = {};
var myArray = new Array('foo','bar');
var myArrayLiteral =['foo','bar'];
var myFunction = new Function("x","y","return x*y");
var myFunctionLiteral = function (x,y) {
return x*y
};
var myRegExp = new RegExp('\bt[a-z]+\b');
var myRegExpLiteral = /\b\t[a-z]+\b/;
console.log(myNumber.constructor,myNUmberLiteral.constructor);
console.log(myString.constructor,myStringLiteral.constructor);
console.log(myBoolean.constructor,myBooleanLiteral.constructor);
console.log(myObject.constructor,myObjectLiteral.constructor);
console.log(myArray.constructor,myArrayLiteral.constructor);
console.log(myFunction.constructor,myFunctionLiteral.constructor);
console.log(myRegExp.constructor,myRegExpLiteral.constructor);
console.log(typeof myNumber, typeof myString, typeof myBoolean, typeof myObject, typeof myArray, typeof myFunction,typeof myRegExp); console.log(typeof myNUmberLiteral, typeof myStringLiteral, typeof myBooleanLiteral, typeof myObjectLiteral,typeof myFunctionLiteral, typeof myRegExpLiteral);
可以看到在控制台输出的结果,new字符后的Number(),String()和Boolean()不是变量。