js資料型別:
基本資料型別:string undefined null boolean number
引用資料型別:object array function
二者的區別:
基本資料型別就是簡單的賦值,引用資料型別,把引用位址賦值給變數
堆記憶體:
就是存放**塊的。存放形式有兩種,一種是物件以鍵值對的形式存放
另一種是函式 以字串的形式存放。
案例:引用資料型別的賦值,是把引用位址賦給它,在修改屬性的時候,通過位址查詢然後改掉。
陣列同理:
引用資料型別,如何操作?
先通過引用位址去查詢堆記憶體中的**,然後再去修改。
this研究在函式內部
在js中的函式形式的種類
(1)普通函式 function fn(){} var fn=function()
(2) 類
物件 object
物件裡面的資料以鍵值對的形式存在。跟json一樣。
(1)單例模式 ===》物件
我們把變數zhang和li 叫「命名空間」
**作用域和堆記憶體的區別:
作用域是函式執行的時候產生fn()
函式執行的時候首先會開闢乙個新的記憶體空間叫棧記憶體(環境或作用域)
資料型別在賦值的時候會開闢乙個新的記憶體空間叫堆記憶體(存放**塊的)
二者會形成乙個記憶體位址。
生成物件的單例模式:
優勢:每個物件都是獨立的,即便屬性起的名字一樣,不會相互干擾,方便現在流行的開發模式」模組化開發「。如果需要使用裡面的屬性,用.運算子 如zhang.name或zhang[「name」],判斷乙個屬性是不是這個物件的用in運算子 如 「name」 in zhang 如果遍歷這個物件用 for(attr in zhang){}.
缺點:不可以批量生產,只能乙個乙個的去建立。
(2)工廠模式===》物件
這種形式我們叫函式封裝。優勢,可以批量生產,減少冗餘**,提高**重複利用率
(高密度低耦合)。沒有繼承和多型。
(3)建構函式==》物件
要求:<1>函式名首字母必須大寫;
<2>裡面的屬性前面必須加this;
<3>函式呼叫的時候必須使用new關鍵字。
我們把person叫類,把zhang叫例項。萬物皆物件,物件的特徵有屬性和方法。
string的類是 string
陣列的類是 array
物件的類是 object
建構函式裡的this指向例項物件。
建構函式裡有了類和例項的概念,並且例項和例項都是獨立的個體,我們把它叫例項識別
建構函式裡的屬性都是私有的,各個例項物件之間沒有公共的屬性。
為了例項的物件擁有公共的屬性,所以js使用了prototype(原型)這個屬性,屬性值是乙個物件,我們可以把公共的屬性放在這個prototype上。
原型分析:
每個函式資料型別(普通函式,類)都有乙個prototype屬性,並且這個屬性是乙個物件資料型別。
每乙個prototype上都有乙個constructor屬性,並且這個屬性值是當前函式或類本身
每乙個物件資料型別(例項,普通物件,prototype)都天生具有乙個__proto__屬性,他的屬性值是當前例項所屬類的原型.
通過影象我們知道
zhang.__proto__==person.prototype true
**原型鏈:
duixiang.shuxing 的時候,首先看這個屬性是不是私有的,私有的就直接使用,如果私有的屬性沒有,就找公有的,公有的有就使用,沒有就按照__proto__找他的類上有沒有,直到找到基類object。如果object沒有就undefined了。這種查詢機制叫原型鏈.
js資料型別
一.原始資料型別 1.typeof 運算子。var a alert typeof a 輸出結果為 undefined 2.undefined 未定義 型別 當變數未定義時,該變數值被預設為undefined 如 var a alert typeof a 輸出結果為 undefined 注意值unde...
js資料型別
js 基本資料型別 undefined null boolean number string js 操作符 typeof檢測給定變數的資料型別。返回值表示的型別 undefined 值未定義。boolean 值為布林型別。string 值為字串。number 值為數字。object 值為物件或nul...
js資料型別
var num 1,boo true,aa null,bb,str mary arr 1,2,4,8 obj arrnew new array 1,2,3 strnew new string 1,2,3 用 typeof 檢測變數的型別 console.log number typeof num n...