1磕道,介紹js的基本數(shù)據(jù)類型。
Undefined行冰、Null溺蕉、Boolean、Number悼做、String
2疯特,介紹js有哪些內(nèi)置對(duì)象?
Object 是 JavaScript 中所有對(duì)象的父對(duì)象
數(shù)據(jù)封裝類對(duì)象:Object肛走、Array漓雅、Boolean、Number 和 String
其他對(duì)象:Function朽色、Arguments邻吞、Math、Date葫男、RegExp抱冷、Error
3,說幾條寫JavaScript的基本規(guī)范梢褐?旺遮,
1.不要在同一行聲明多個(gè)變量赵讯。
2.請(qǐng)使用 ===/!==來比較true/false或者數(shù)值
3.使用對(duì)象字面量替代new Array這種形式
4.不要使用全局函數(shù)。
5.Switch語句必須帶有default分支
6.函數(shù)不應(yīng)該有時(shí)候有返回值耿眉,有時(shí)候沒有返回值边翼。
7.For循環(huán)必須使用大括號(hào)
8.If語句必須使用大括號(hào)
9.for-in循環(huán)中的變量 應(yīng)該使用var關(guān)鍵字明確限定作用域,從而避免作用域污染鸣剪。
4组底,JavaScript原型,原型鏈 ? 有什么特點(diǎn)西傀?
每個(gè)對(duì)象都會(huì)在其內(nèi)部初始化一個(gè)屬性斤寇,就是prototype(原型)桶癣,當(dāng)我們?cè)L問一個(gè)對(duì)象的屬性時(shí)拥褂,
如果這個(gè)對(duì)象內(nèi)部不存在這個(gè)屬性,那么他就會(huì)去prototype里找這個(gè)屬性牙寞,這個(gè)prototype又會(huì)有自己的prototype饺鹃,
于是就這樣一直找下去,也就是我們平時(shí)所說的原型鏈的概念间雀。
關(guān)系:instance.constructor.prototype = instance.__proto__
特點(diǎn):
JavaScript對(duì)象是通過引用來傳遞的悔详,我們創(chuàng)建的每個(gè)新對(duì)象實(shí)體中并沒有一份屬于自己的原型副本。當(dāng)我們修改原型時(shí)惹挟,與之相關(guān)的對(duì)象也會(huì)繼承這一改變茄螃。
當(dāng)我們需要一個(gè)屬性的時(shí),Javascript引擎會(huì)先看當(dāng)前對(duì)象中是否有這個(gè)屬性连锯, 如果沒有的話归苍,
就會(huì)查找他的Prototype對(duì)象是否有這個(gè)屬性,如此遞推下去运怖,一直檢索到 Object 內(nèi)建對(duì)象拼弃。
function Func(){}
Func.prototype.name = "Sean";
Func.prototype.getInfo = function() {? ? ? return this.name;}
var person = new Func();
//現(xiàn)在可以參考
var person = Object.create(oldObject);
console.log(person.getInfo());
//它擁有了Func的屬性和方法//"Sean"console.log(Func.prototype);
// Func { name="Sean", getInfo=function()}
5,JavaScript有幾種類型的值摇展?吻氧,你能畫一下他們的內(nèi)存圖嗎?
棧:原始數(shù)據(jù)類型(Undefined咏连,Null盯孙,Boolean,Number祟滴、String)
堆:引用數(shù)據(jù)類型(對(duì)象振惰、數(shù)組和函數(shù))
兩種類型的區(qū)別是:存儲(chǔ)位置不同;
原始數(shù)據(jù)類型直接存儲(chǔ)在棧(stack)中的簡(jiǎn)單數(shù)據(jù)段踱启,占據(jù)空間小报账、大小固定研底,屬于被頻繁使用數(shù)據(jù),所以放入棧中存儲(chǔ)透罢;
引用數(shù)據(jù)類型存儲(chǔ)在堆(heap)中的對(duì)象,占據(jù)空間大榜晦、大小不固定,如果存儲(chǔ)在棧中,將會(huì)影響程序運(yùn)行的性能羽圃;引用數(shù)據(jù)類型在棧中存儲(chǔ)了指針乾胶,該指針指向堆中該實(shí)體的起始地址。當(dāng)解釋器尋找引用值時(shí)朽寞,會(huì)首先檢索其
在棧中的地址识窿,取得地址后從堆中獲得實(shí)體
6,Javascript如何實(shí)現(xiàn)繼承脑融?
1喻频、構(gòu)造繼承
2、原型繼承
3肘迎、實(shí)例繼承
4甥温、拷貝繼承
原型prototype機(jī)制或apply和call方法去實(shí)現(xiàn)較簡(jiǎn)單,建議使用構(gòu)造函數(shù)與原型混合方式妓布。
? function Parent(){? this.name = 'wang';? }? function Child(){? this.age = 28;? }? Child.prototype = new Parent();//繼承了Parent姻蚓,通過原型? var demo = new Child();? alert(demo.age);? alert(demo.name);//得到被繼承的屬性
7,Javascript作用鏈域?
作用域鏈的作用是保證執(zhí)行環(huán)境里有權(quán)訪問的變量和函數(shù)是有序的匣沼,作用域鏈的變量只能向上訪問狰挡,變量訪問到window對(duì)象即被終止,作用域鏈向下訪問變量是不被允許的释涛。
8加叁,談?wù)凾his對(duì)象的理解。
this總是指向函數(shù)的直接調(diào)用者(而非間接調(diào)用者)枢贿;
如果有new關(guān)鍵字殉农,this指向new出來的那個(gè)對(duì)象;
在事件中局荚,this指向觸發(fā)這個(gè)事件的對(duì)象超凳,特殊的是,IE中的attachEvent中的this總是指向全局對(duì)象Window耀态;
this就是指的是當(dāng)前對(duì)象
9轮傍,null,undefined 的區(qū)別首装?
null 表示一個(gè)對(duì)象被定義了创夜,值為“空值”;
undefined 表示不存在這個(gè)值仙逻。
typeof undefined //"undefined"
undefined :是一個(gè)表示"無"的原始值或者說表示"缺少值"驰吓,就是此處應(yīng)該有一個(gè)值涧尿,但是還沒有定義。當(dāng)嘗試讀取時(shí)會(huì)返回 undefined檬贰;
例如變量被聲明了姑廉,但沒有賦值時(shí),就等于undefined
typeof null //"object"
null : 是一個(gè)對(duì)象(空對(duì)象, 沒有任何屬性和方法)翁涤;
例如作為函數(shù)的參數(shù)桥言,表示該函數(shù)的參數(shù)不是對(duì)象;
注意:
在驗(yàn)證null時(shí)葵礼,一定要使用 === 号阿,因?yàn)?== 無法分別 null 和 undefined
undefined表示"缺少值",就是此處應(yīng)該有一個(gè)值鸳粉,但是還沒有定義扔涧。典型用法是:
(1)變量被聲明了,但沒有賦值時(shí)赁严,就等于undefined扰柠。
(2) 調(diào)用函數(shù)時(shí),應(yīng)該提供的參數(shù)沒有提供疼约,該參數(shù)等于undefined。
(3)對(duì)象沒有賦值的屬性蝙泼,該屬性的值為undefined程剥。
(4)函數(shù)沒有返回值時(shí),默認(rèn)返回undefined汤踏。
null表示"沒有對(duì)象"织鲸,即該處不應(yīng)該有值。典型用法是:
?(1) 作為函數(shù)的參數(shù)溪胶,表示該函數(shù)的參數(shù)不是對(duì)象搂擦。
?(2) 作為對(duì)象原型鏈的終點(diǎn)。
10哗脖,["1", "2", "3"].map(parseInt) 答案是多少瀑踢?
[1, NaN, NaN] 因?yàn)?parseInt 需要兩個(gè)參數(shù) (val, radix),
其中 radix 表示解析時(shí)用的基數(shù)才避。
map 傳了 3 個(gè) (element, index, array)橱夭,對(duì)應(yīng)的 radix 不合法導(dǎo)致解析失敗。