全局對象 global (瀏 window)
global.parseInt()
global.parsefloat()
window的屬性
window可以省略
| ECMAScript規(guī)定 | 私有(Chrome/Firefox) |
|---|---|
| parseInt | alert(彈窗) |
| parsefloat | prompt(彈框提示) |
| Number() | confirm(確認) |
| String() | console(開發(fā)者) |
| Boolean() | document(文檔) DOM |
| Object() | history(瀏覽器)BOM |
MDN window 可以查到window所有屬性
四個全局函數 Number()、String()、Boolean()、Object()
簡單類型和對象的區(qū)別
| Number()創(chuàng)建一個number類型的對象 |
|---|
| 1.Number('1') |
| 2.var n = new Number(1) |
普通的數字1和對象1 的區(qū)別

但是js有黑魔法,使得普通數字1也能使用對象1中的方法
var n1 =1;
n1.toString()
n1.valueOf()
臨時創(chuàng)建了一個temp變量
temp = new Number(n1)
temp.toString()
然后再把temp干掉

String()
跟Number()對象類似
s2.charAt(0) // 獲取對應位置的字符
"a"
s2.charCodeAt(0) // 獲取對應位置的字符的編碼
97
trim() 刪除兩端的空格
concat() 連接兩個字符串
slice(0,2) 切片截取
Boolean()

千年老坑
falsey值只有 0 NaN '' null undefined 和false
對象都是true
f就是簡單的false
f2 是一個false對象
Object()
var o1 = {}
var o2 = new Object()
Number String Boolean Object
谷內定理:
1.7中數據類型
2.5個falsy
3.內存圖
原型和原型鏈
_ _ proto _ _

數據結構
var n1 = Number(1)
o1._ proto _ = Number.prototype
o1._ proto . _ proto_ _ = Object.prototype
String.prototype 是 String 的公用屬性的引用
s._ proto _ 是String的公用屬性的引用


對象的_ _ proto _ _ === 函數.prototype
共同指向公用屬性
- _ proto _ _ = Number.prototype
'1'. _ _ proto _ = String.prototype
重中之重 記住一個公式:對象的_ _ proto _ _ === 函數.prototype
var obj = 函數.prototype
obj._ _ proto _ _ === Object.prototype
函數.prototype._ _ proto _ _ ===Object.prototype
var obj2 = 函數
obj2. _ _proto _ _ === Function.prototype
特殊 Function._ _ proto _ _ === Function.prototype
Function.prototype. _ _ proto _ _ === Object.prototype
注意 Object. _ _ prototype_ _ === Function.prototype
Object.prototype. _ _ proto _ _ === null
高程上的原型對象:
無論什么時候,只要創(chuàng)建了一個新函數,就會根據一組特定的規(guī)則為該函數創(chuàng)建一個 prototype屬性,這個屬性指向函數的原型對象。在默認情況下,所有原型對象都會自動獲得一個 constructor(構造函數)屬性,這個屬性包含一個指向 prototype 屬性所在函數的指針。
高程原型鏈:
利用原型讓一個引用類型繼承另一個引用類型的屬性和方法。簡單回顧一下構造函數、原型和實例的關系:每個構造函數都有一個原型對象,原型對象都包含一個指向構造函數的指針,而實例都包含一個指向原型
對象的內部指針。那么,假如我們讓原型對象等于另一個類型的實例,結果會怎么樣呢?顯然,此時的原型對象將包含一個指向另一個原型的指針,相應地,另一個原型中也包含著一個指向另一個構造函數的指針。假如另一個原型又是另一個類型的實例,那么上述關系依然成立,如此層層遞進,就構成了實例與原型的鏈條。這就是所謂原型鏈的基本概念
實現原型鏈有一種基本模式,其代碼大致如下。
function SuperType(){
this.property = true;
}
SuperType.prototype.getSuperValue = function(){
return this.property;
};
function SubType(){
this.subproperty = false;
}
//繼承了 SuperType
SubType.prototype = new SuperType();
SubType.prototype.getSubValue = function (){
return this.subproperty;
};
var instance = new SubType();
alert(instance.getSuperValue()); //true
SuperType 和 SubType。每個類型分別有一個屬性和一個方法。它們
的主要區(qū)別是 SubType 繼承了 SuperType,而繼承是通過創(chuàng)建 SuperType 的實例,并將該實例賦給SubType.prototype 實現的。實現的本質是重寫原型對象,代之以一個新類型的實例。換句話說,原來存在于 SuperType 的實例中的所有屬性和方法,現在也存在SubType.prototype 中了。在確立了繼承關系之后,我們給 SubType.prototype 添加了一個方法,這樣就在繼承了 SuperType 的屬性和方法的基礎上又添加了一個新方法。這個例子中的實例以及構造函數和原型之間的關系如圖 6-4 所示。
構造函數里的方法存放在原型對象中,屬性放在實例中

1.toString() 錯誤
1..toString()正常
為什么呢? 因為瀏覽器無法判斷那個點是小數點還是一個對象調用方法的點,所以第一個會錯誤,而第二個式子一個給小數點,一個給屬性自然會成功,只要讓瀏覽器知道這個點的作用
同理:1. toString() 也會成功