2019-11-9 seo達人
一 - 字面量方式和new方式
?每次創(chuàng)建數組或對象的時候,都能用以下兩種方法創(chuàng)建:咦?有什么區(qū)別呢?還有哪些可以有這兩種方法呢?我到底用哪一種呢?
var arr = [];//字面量方法創(chuàng)建數組
var arr = new Array();//實例化構造函數方法創(chuàng)建數組
var obj = {};//字面量方法創(chuàng)建對象
var obj = new Object();//實例化構造函數方法創(chuàng)建對象
二 - 哪些對象可以new?
?只要存在構造函數的都可以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)建對象、數組
字面量分為:字符串字面量(string literal )、數組字面量(array literal)和對象字面量(object literal),另外還有函數字面量(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去調用構造方法,減少代碼,減少代碼運算量。
那new這個操作符到底做了什么?
var arr = new Array();
/
new:
1:var obj = {};
2:obj.proto = Array.prototype;
3:Array.call(obj);
/
五 - 使用哪一種?
字面量比new
比如:{}是字面量,可以立即求值
而new Object()本質上是方法(只不過這個方法是內置的)調用, 既然是方法調用,就涉及到在proto鏈中遍歷該方法,當找到該方法后,又會生產方法調用必須的堆棧信息,方法調用結束后,還要釋放該堆棧。
————————————————