JavaScript學習筆記01
原生函式
原生函式可以當做建構函式來使用,通過建構函式(如
new String("abc")
)建立出來的是封裝了基本型別值(如"abc"
)的封裝物件。
var string = new String("abc");
console.log(string); // [String: 'abc']
console.log(string instanceof String); // true
console.log(typeof string); // object
console.log(Object.prototype.toString.call(string)); // [object String]
內部屬性
所有
typeof
返回值為"object"
的物件都包含了一個內部屬性,可以通過Object.prototype.toString(..)
檢視。
console.log(Object.prototype.toString.call([1,2,3])) // [object Array]
console.log(Object.prototype.toString.call(true)) // [object Boolean]
console.log(Object.prototype.toString.call(42)) // [object Number]
封裝物件包裝
基本型別沒有
.length
和.toString()
等這樣的屬性和方法,需要封裝物件才可使用,此時JavaScript會為基本型別值自動包裝成一個封裝物件,瀏覽器對此也進行了優化,因此應優先考慮用基本型別值,而不是new String("abc")
新物件。
var a = "abc";
console.log(a.length); // 3
console.log(a.toUpperCase()); //ABC
一般不推薦直接使用封裝物件,如果想要自行封裝基本型別值,可以使用
Object(..)
函式(不帶new
關鍵字)。
var a = "abc";
var b = new String(a);
var c = Object(a);
console.log(typeof a); // string
console.log(typeof b); // object
console.log(typeof c); // object
console.log(b instanceof String); // true
console.log(c instanceof String); // true
console.log(Object.prototype.toString.call(b)); // [object String]
console.log(Object.prototype.toString.call(c)); // [object String]
拆封
如果想要得到封裝物件的基本型別值,可以使用
valueof()
函式:
var a = new String("abc");
var b = new Boolean(true);
a.valueof(); // "abc"
b.valueof(); // true
原生函式作為建構函式
建構函式
Array(..)
不要求必須帶new
關鍵字,不帶時,系統會自動補上。Array
建構函式只帶一個數字引數的時候,該引數會被當做陣列的預設長度,而非一個元素。
var a = Array(3);
console.log(a.length); // 3
建立包含
undefined
的陣列:apply(..)
是一個工具,適用於所有物件,它會以一種特殊的方式來呼叫傳遞給它的函式。第一個引數是this
物件,第二個必須是一個陣列(或類陣列物件,array-like object),陣列中的值被用作函式的引數。
var a = Array.apply(null,{ length:3});
console.log(a); // [ undefined, undefined, undefined ]
Object(..)、Function(..)、RegExp(..)
儘量不要使用
Object(..)、Function(..)、Regexp(..)
,在實際情況中沒有必要使用new Object()
來建立物件,因為這樣無法像常量形式那樣一次設定多個屬性,而必須逐一設定。強烈建議使用常量形式定義正規表示式,語法簡單、效率高。
Data(..)、Error(..)
建立日起物件必須使用
new Date()
。Date(..)
可以帶引數,用來指定日期時間,若不帶引數則使用當前的如期和時間。
console.log((new Date()).getDate()); // 28
建構函式
Error(..)
,帶不帶new
關鍵字都可以。
function foo(x) {
if (!x)
throw Error("x not found");
}
Symbol(..)
基本資料型別,符號(
Symbol
)是具有唯一性的特殊值,用它來命名物件屬性不容易導致重名,符號還可以自行定義,以靜態屬性形式出現,如Symbol.create
等、不能用new
關鍵字建立。
var mysym = Symbol("abcd");
console.log(mysym); // Symbol(abcd)
var a = {};
a[mysym] = "apple";
console.log(a[mysym]); // apple
原生原型
原生建構函式都有自己的
.prototype
物件,如Array.prototype
等,這些物件包含其對應子型別所有的行為特徵。比如將字串封裝成字串物件,就可以訪問String.prototype
中定義的方法。根據文件約定,可將
.prototype.
替換為#
,如String.prototype.trim()
簡寫為String#trim()
來去掉字串的前後空格,Array#concat(..)
合併陣列,Number#tofixed(..)
將數字轉換為指定長度的整數字符串,其他物件同樣如此。
Function.prototype
是一個空函式,Array.prototype
是一個空陣列,RegExp.prototype
是一個空正規表示式,對未賦值的變數來說,它們是很好的預設值,在ES6中可通過函式宣告的內建語法來設定(取而代之)。
相關文章
- JavaScript學習筆記JavaScript筆記
- JavaScript 學習筆記JavaScript筆記
- JavaScript學習筆記(二)JavaScript筆記
- javaScript argument 學習筆記JavaScript筆記
- JavaScript學習筆記13JavaScript筆記
- JavaScript學習筆記00JavaScript筆記
- 【JavaScript學習筆記】if使用JavaScript筆記
- Javascript 學習 筆記六JavaScript筆記
- Javascript 學習 筆記五JavaScript筆記
- Javascript 學習 筆記三JavaScript筆記
- Javascript 學習 筆記四JavaScript筆記
- 學習筆記01筆記
- JavaScript入門學習學習筆記(上)JavaScript筆記
- 學習JavaScript的原型筆記JavaScript原型筆記
- JavaScript學習筆記(八)—— 補JavaScript筆記
- javascript學習筆記--splice、sliceJavaScript筆記
- JavaScript正則學習筆記JavaScript筆記
- 【JavaScript學習筆記】hello worldJavaScript筆記
- 【JavaScript學習筆記】畫圖JavaScript筆記
- JavaScript學習筆記---數值JavaScript筆記
- JavaScript學習筆記---緣起JavaScript筆記
- JavaScript DOM 程式設計藝術 學習筆記01JavaScript程式設計筆記
- JVM學習筆記-01JVM筆記
- JavaScript設計模式學習筆記JavaScript設計模式筆記
- JavaScript學習筆記 - 原生函式JavaScript筆記函式
- JavaScript學習筆記——基礎部分JavaScript筆記
- javascript學習筆記,二、變數JavaScript筆記變數
- JavaScript入門-學習筆記(一)JavaScript筆記
- javaScript 學習計劃以及筆記JavaScript筆記
- Javascript 學習筆記--語法篇JavaScript筆記
- 【JavaScript學習筆記】滑鼠樣式JavaScript筆記
- 【JavaScript學習筆記】點選消失JavaScript筆記
- JavaScript學習筆記---基本語法JavaScript筆記
- javascript學習筆記--元字元使用練習JavaScript筆記字元
- JavaScript學習筆記1—快速入門JavaScript筆記
- 《JavaScript語言精粹》學習筆記二JavaScript筆記
- 《JavaScript語言精粹》學習筆記一JavaScript筆記
- [心得] JavaScript權威指南學習筆記JavaScript筆記