每次創(chuàng)建數(shù)組或對象的時候绢陌,都能用以下兩種方法創(chuàng)建:咦卡者?有什么區(qū)別呢步淹?還有哪些可以有這兩種方法呢阻塑?我到底用哪一種呢蓝撇?
var arr = [];//字面量方法創(chuàng)建數(shù)組 var arr = new Array();//實例化構造函數(shù)方法創(chuàng)建數(shù)組 var obj = {};//字面量方法創(chuàng)建對象 var obj = new Object();//實例化構造函數(shù)方法創(chuàng)建對象
一、哪些對象可以new陈莽?
只要存在構造函數(shù)的都可以new出來渤昌。
var num = new Number();
var boo = new Boolean();
var str = new String();
var arr = new Array();
var obj = new Object();
var fn = new Function();
var reg = new RegExp();
var date = new Date();
基本上來說 js中對象虽抄,除了null ,undefined,其他的都是可以用new出來的耘沼。
二极颓、字面量是什么?
字面量表示如何表達這個值群嗤,一般除去表達式菠隆,給變量賦值時,等號右邊都可以認為是字面量狂秘。JavaScript支持字面量骇径,允許使用一種簡潔而可讀的記法來創(chuàng)建對象、數(shù)組
字面量分為字符串字面量(string literal )者春、數(shù)組字面量(array literal)和對象字面量(object literal)破衔,另外還有函數(shù)字面量(function literal)等等等等。
var num = 1;
var boo = true;
var str = "a";
var arr = [];
var obj = {};
var fn = function(){};
var reg = /\s/g;
三钱烟、兩種的區(qū)別
- 字面量語法簡單晰筛,直接,優(yōu)雅
- 也沒有必要去使用new去調(diào)用構造方法拴袭,減少代碼读第,減少代碼運算量。
那new這個操作符到底做了什么拥刻?
var arr = new Array(); /* new: 1:var obj = {}; 2:obj.__proto__ = Array.prototype; 3:Array.call(obj); */
四怜瞒、使用哪一種?
字面量比new高效
比如:{}是字面量般哼,可以立即求值
而new Object()本質上是方法(只不過這個方法是內(nèi)置的)調(diào)用吴汪, 既然是方法調(diào)用,就涉及到在proto鏈中遍歷該方法蒸眠,當找到該方法后漾橙,又會生產(chǎn)方法調(diào)用必須的堆棧信息,方法調(diào)用結束后楞卡,還要釋放該堆棧霜运。