3.1.1收苏、介紹js的基本數(shù)據(jù)類型
Undefined亿卤、Null、Boolean鹿霸、Number排吴、String、Symbol(new in ECMAScript 2015)
3.1.2懦鼠、介紹js有哪些內(nèi)置對象钻哩?
Object是 JavaScript 中所有對象的父對象
數(shù)據(jù)封裝類對象:Object、Array肛冶、Boolean街氢、Number 和 String
其他對象:Function、Arguments睦袖、Math珊肃、Date、RegExp馅笙、Error
3.1.3伦乔、說幾條寫JavaScript的基本規(guī)范?
1.不要在同一行聲明多個變量董习。
2.請使用 ===/!==來比較true/false或者數(shù)值
3.使用對象字面量替代new Array這種形式
4.不要使用全局函數(shù)烈和。
5.Switch語句必須帶有default分支
6.函數(shù)不應(yīng)該有時候有返回值,有時候沒有返回值皿淋。
7.For循環(huán)必須使用大括號
8.If語句必須使用大括號
9.for-in循環(huán)中的變量 應(yīng)該使用var關(guān)鍵字明確限定作用域招刹,從而避免作用域污染。
3.1.4沥匈、JavaScript有幾種類型的值蔗喂?,你能畫一下他們的內(nèi)存圖嗎
棧:原始數(shù)據(jù)類型(Undefined高帖,Null,Boolean畦粮,Number散址、String)
堆:引用數(shù)據(jù)類型(對象、數(shù)組和函數(shù))
兩種類型的區(qū)別是:存儲位置不同宣赔;
原始數(shù)據(jù)類型直接存儲在棧(stack)中的簡單數(shù)據(jù)段预麸,占據(jù)空間小、大小固定儒将,屬于被頻繁使用數(shù)據(jù)吏祸,所以放入棧中存儲;
引用數(shù)據(jù)類型存儲在堆(heap)中的對象,占據(jù)空間大钩蚊、大小不固定,如果存儲在棧中贡翘,將會影響程序運行的性能蹈矮;引用數(shù)據(jù)類型在棧中存儲了指針,該指針指向堆中該實體的起始地址鸣驱。當解釋器尋找引用值時泛鸟,會首先檢索其在棧中的地址,取得地址后從堆中獲得實體
3.1.5踊东、null北滥,undefined 的區(qū)別?
null表示一個對象被定義了闸翅,值為“空值”再芋;
undefined表示不存在這個值。
typeof undefined ????//"undefined"
undefined :是一個表示"無"的原始值或者說表示"缺少值"坚冀,就是此處應(yīng)該有一個值济赎,但是還沒有定義。當嘗試讀取時會返回 undefined遗菠;例如變量被聲明了联喘,但沒有賦值時,就等于undefined
typeof null ????????//"object"
null :是一個對象(空對象, 沒有任何屬性和方法)辙纬;
??? 例如作為函數(shù)的參數(shù)豁遭,表示該函數(shù)的參數(shù)不是對象;
注意:
在驗證null時贺拣,一定要使用 === 蓖谢,因為 == 無法分別 null 和 undefined
參考http://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html
3.1.6、javascript代碼中的"use strict";是什么意思 ? 使用它區(qū)別是什么譬涡?
use strict是一種ECMAscript 5 添加的(嚴格)運行模式,這種模式使得 Javascript 在更嚴格的條件下運行,使JS編碼更加規(guī)范化的模式,消除Javascript語法的一些不合理闪幽、不嚴謹之處,減少一些怪異行為涡匀。默認支持的糟糕特性都會被禁用盯腌,比如不能用with,也不能在意外的情況下給全局變量賦值;
全局變量的顯示聲明,函數(shù)必須聲明在頂層陨瘩,不允許在非函數(shù)代碼塊內(nèi)聲明函數(shù),arguments.callee也不允許使用腕够;消除代碼運行的一些不安全之處,保證代碼運行的安全,限制函數(shù)中的arguments修改舌劳,嚴格模式下的eval函數(shù)的行為和非嚴格模式的也不相同;
提高編譯器效率帚湘,增加運行速度;
為未來新版本的Javascript標準化做鋪墊甚淡。
3.1.7大诸、如何判斷一個對象是否屬于某個類?
使用instanceof(待完善)
?? ?if(a instanceof Person){
????? ? alert('yes');
?}
3.1.8、new操作符具體干了什么呢?
1资柔、創(chuàng)建一個空對象焙贷,并且 this 變量引用該對象,同時還繼承了該函數(shù)的原型建邓。
2盈厘、屬性和方法被加入到 this 引用的對象中。
3官边、新創(chuàng)建的對象由 this 所引用沸手,并且最后隱式的返回 this 。
var obj ?= {};
obj.__proto__ = Base.prototype;
Base.call(obj);
3.1.9注簿、用原生JavaScript的實現(xiàn)過什么功能嗎契吉?
原生JavaScript常用的正則表達式
原生JavaScript實現(xiàn)字符串長度截取
原生JavaScript獲取域名主機
原生JavaScript清除空格
原生JavaScript替換全部
原生JavaScript轉(zhuǎn)義html標簽
原生JavaScript還原h(huán)tml標簽
原生JavaScript時間日期格式轉(zhuǎn)換
原生JavaScript判斷是否為數(shù)字類型
原生JavaScript設(shè)置cookie值
原生JavaScript獲取cookie值
原生JavaScript加入收藏夾
原生JavaScript設(shè)為首頁
原生JavaScript判斷IE6
原生JavaScript加載樣式文件
原生JavaScript返回腳本內(nèi)容
原生JavaScript清除腳本內(nèi)容
原生JavaScript動態(tài)加載腳本文件
原生JavaScript返回按ID檢索的元素對象
原生JavaScript返回瀏覽器版本內(nèi)容
原生JavaScript元素顯示的通用方法
3.1.10、documen.write和 innerHTML的區(qū)別
document.write只能重繪整個頁面
innerHTML可以重繪頁面的一部分
3.1.11诡渴、數(shù)組和對象有哪些原生方法捐晶,列舉一下?
數(shù)組:join():將數(shù)組元素按指定的分隔符拼接成一字符串返回妄辩,默認分隔符為英文逗號
sort(fn):數(shù)組排序,默認是按英文字母的ASC碼升序排列惑灵,比如apple排在orange前面
pop():刪除數(shù)組的最后一個元素,把數(shù)組長度減 1眼耀,并且返回它刪除的元素的值英支。
push(n1,n2,n3,....nx):向數(shù)組末尾添加一個或多個元素,并返回添加后數(shù)組的長度
reverse():顛倒數(shù)組中元素的順序
shift():刪除數(shù)組的第一個元素哮伟,并返回它刪除的那個元素
slice(start,end):用于截取start和end之間的數(shù)組元素并存入新數(shù)組返回
unshift(element1,.....,element):向數(shù)組開頭添加一個或多個元素干花,并返回添加后的數(shù)組長度。至少要傳一個參數(shù)楞黄。
3.1.12池凄、用js實現(xiàn)千位分隔符?(來源:前端農(nóng)民工,提示:正則+replace)
function commafy(num) {
?????num = num + '';
?????var reg = /(-?d+)(d{3})/;
?? ??if(reg.test(num)){
?????num = num.replace(reg, '$1,$2');
????}
??? return num;
}
3.1.13鬼廓、如何測試前端代碼么?知道BDD, TDD, Unit Test么? 知道怎么測試你的前端工程么(mocha, sinon, jasmin, qUnit..)?
3.1.14肿仑、前端templating(Mustache, underscore, handlebars)是干嘛的, 怎么用?
Handlebars是一款很高效的模版引擎,提供語意化的模版語句,最大的兼容Mustache模版引擎, 提供最大的Mustache模版引擎兼容, 無需學(xué)習(xí)新語法即可使用;
3.1.15、簡述一下Handlebars的基本用法碎税?
Js語義模板庫首先type設(shè)置為?type="text/x-handlebars-template
使用Handlebars.compile()方法來預(yù)編譯模板?
#表示blocks’
?3.1.16柏副、簡述一下Handlerbars的對模板的基本處理流程, 如何編譯的蚣录?如何緩存的?
略
3.1.17眷篇、Object.is()與原來的比較操作符“ ===”萎河、“ ==”的區(qū)別?
兩等號判等,會在比較時進行類型轉(zhuǎn)換虐杯;
三等號判等(判斷嚴格)玛歌,比較時不進行隱式類型轉(zhuǎn)換,(類型不同則會返回false);
Object.is在三等號判等的基礎(chǔ)上特別處理了 NaN 擎椰、-0 和 +0 支子,保證 -0 和 +0 不再相同,但 Object.is(NaN, NaN) 會返回 true.Object.is 應(yīng)被認為有其特殊的用途达舒,而不能用它認為它比其它的相等對比更寬松或嚴格值朋。
3.1.18、請指出JavaScript宿主對象 (host objects) 和原生對象 (native objects) 的區(qū)別巩搏?
一昨登、原生對象
ECMA-262把原生對象(native object)定義為“獨立于宿主環(huán)境的 ECMAScript 實現(xiàn)提供的對象”。
Object贯底、Function丰辣、Array、String禽捆、Boolean笙什、Number、Date胚想、RegExp琐凭、Error、EvalError顿仇、RangeError淘正、ReferenceError、SyntaxError臼闻、TypeError鸿吆、URIError、ActiveXObject(服務(wù)器方面)述呐、Enumerator(集合遍歷類)惩淳、RegExp(正則表達式)
由此可以看出,簡單來說乓搬,原生對象就是ECMA-262定義的類(引用類型)思犁。
二、宿主對象
何為“宿主對象”进肯?ECMAScript中的“宿主”當然就是我們網(wǎng)頁的運行環(huán)境激蹲,即“操作系統(tǒng)”和“瀏覽器”。所有非原生對象都是宿主對象(host object)江掩,即由 ECMAScript 實現(xiàn)的宿主環(huán)境提供的對象学辱。
所有的BOM和 DOM 對象都是宿主對象乘瓤。因為其對于不同的“宿主”環(huán)境所展示的內(nèi)容不同。其實說白了就是策泣,ECMAScript官方未定義的對象都屬于宿主對象衙傀,因為其未定義的對象大多數(shù)是自己通過ECMAScript程序創(chuàng)建的對象。TML DOM 是 W3C 標準(是 HTML 文檔對象模型的英文縮寫萨咕,Document Object Model for HTML)统抬。
HTML DOM定義了用于 HTML 的一系列標準的對象,以及訪問和處理 HTML 文檔的標準方法危队。
通過DOM聪建,可以訪問所有的 HTML 元素,連同它們所包含的文本和屬性交掏∽逼可以對其中的內(nèi)容進行修改和刪除,同時也可以創(chuàng)建新的元素盅弛。
3.1.19钱骂、例舉3種強制類型轉(zhuǎn)換和2種隱式類型轉(zhuǎn)換?
強制(parseInt,parseFloat,number)隱式(== – ===);
QQ技術(shù)交流群:815302226