成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript 基本功--面試寶典

Coly / 1553人閱讀

摘要:示例構(gòu)造函數(shù)繼承實(shí)例對(duì)象其次,我們還可以使用中的新語法等關(guān)鍵字來實(shí)現(xiàn)繼承。對(duì)象的屬性是該對(duì)象的構(gòu)造函數(shù)的屬性?;谏线厴?gòu)造函數(shù)繼承代碼作用域與命名空間如果了解的用法,那么就應(yīng)該只要有塊級(jí)作用域和函數(shù)作用域。

JavaScript數(shù)據(jù)類型 JavaScript中有哪些基本數(shù)據(jù)類型

undefinednull、number、string、booleansymbol(es6中新增)
為啥沒有object、array、function?他們都屬于復(fù)雜的數(shù)據(jù)類型??雌饋碛悬c(diǎn)咬文嚼字。

typeof 操作符對(duì)各個(gè)數(shù)據(jù)類型的操作結(jié)果

string-------------------------string
number-------------------------number
boolean------------------------boolean
function-----------------------function
undefined----------------------undefined
null---------------------------object (null值表示一個(gè)空對(duì)象指針)
array--------------------------object
object-------------------------object
因此,有些時(shí)候typeof并不能準(zhǔn)確的判斷某個(gè)變量的數(shù)據(jù)類型。

如何區(qū)分null和undefined

通過上邊可以看出,使用typeof就可以判斷區(qū)null和undefined了。
還可以通過null === undefined這種方式來判斷。

如何準(zhǔn)確的判斷一個(gè)變量的數(shù)據(jù)類型

JavaScript 中所有變量都可以當(dāng)作對(duì)象使用,除了 null 和 undefined 兩個(gè)例外。所以我們可以使用對(duì)象原型鏈上的toString方法來將一個(gè)變量轉(zhuǎn)化成字符串,然后區(qū)分他們的類型。
Object.prototype.toString.call(*);示例:

Object.prototype.toString.call(null)           //  "[object Null]"
Object.prototype.toString.call(undefined)      //  "[object Undefined]"

*在IE8中兩者結(jié)果都為 "[object Object]"
因此,我們也可以用這個(gè)方法來區(qū)分null和undefined

對(duì)象創(chuàng)建和使用

創(chuàng)建對(duì)象

var obj1 = {x:1,"long name":2};
var obj2 = new Object();
var obj3 = Object.create(obj2);

訪問對(duì)象屬性

obj1.x                // 1
obj1["long name"]     // 2 注意,如果屬性名有空格或者中劃線什么的就只能使用這種方式了

刪除對(duì)象屬性

delete obj1.x         // 刪除對(duì)象屬性的唯一方法是delete
繼承與原型鏈

前邊我們說了,可以認(rèn)為 JavaScript 中萬物皆對(duì)象。每個(gè)對(duì)象都有一個(gè)私有 Prototype。它持有一個(gè)連接到另一個(gè)稱為其 prototype 對(duì)象(原型對(duì)象)的鏈接。該 prototype 對(duì)象又具有一個(gè)自己的原型,層層向上直到一個(gè)對(duì)象的原型為 null。
繼承
上邊創(chuàng)建對(duì)象以及可以看到使用 Object.create 可以實(shí)現(xiàn)繼承。還有可以使用Object.prototype來實(shí)現(xiàn)繼承。示例:

var obj = {a:1}
function P(name){    // 構(gòu)造函數(shù)
    this.name = name
}
P.prototype = obj  // 繼承obj
var p = new P("wesley");     // 實(shí)例對(duì)象
p.a                  // 1

其次,我們還可以使用es6中的新語法class等關(guān)鍵字來實(shí)現(xiàn)繼承。
原型鏈
原型鏈的定義復(fù)雜拗口,我們可以通過 JavaScript 的非標(biāo)準(zhǔn)但許多瀏覽器實(shí)現(xiàn)的屬性__proto__來理解原型鏈。
對(duì)象的__proto__屬性是該對(duì)象的構(gòu)造函數(shù)的prototype屬性?;谏线厴?gòu)造函數(shù)繼承代碼:

console.log(p.__proto__ === P.prototype)                       // true
console.log(P.prototype === obj)                               // true
console.log(P.prototype.__proto__ === Object.prototype)        // true
console.log(Object.prototype.__proto__ === null)               // true
作用域與命名空間

如果了解es6的let用法,那么就應(yīng)該只要 JavaScript 有塊級(jí)作用域和函數(shù)作用域。簡(jiǎn)單來說通常我們使用var創(chuàng)建的變量都屬于函數(shù)作用域。
什么是塊級(jí)作用域呢?其實(shí)可以簡(jiǎn)單理解為一對(duì)花括號(hào)包圍的代碼塊的作用范圍內(nèi)。
JavaScript 中沒有顯式的命名空間定義,這就意味著所有對(duì)象都定義在一個(gè)全局共享的命名空間下面。
每次引用一個(gè)變量,JavaScript 會(huì)向上遍歷整個(gè)作用域直到找到這個(gè)變量為止。 如果到達(dá)全局作用域但是這個(gè)變量仍未找到,則會(huì)拋出 ReferenceError 異常。
隱式的全局變量

foo1 = 1;
var foo2 = 2;   // 如果是在函數(shù)內(nèi)部  就是局部變量
let foo3 = 3;   // 如果是在代碼塊內(nèi)  就是局部變量

可以通過如下代碼的執(zhí)行結(jié)果來理解let和var

var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10

如果使用let

var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6

變量聲明提升
var 表達(dá)式和 function 聲明都將會(huì)被提升到當(dāng)前作用域的頂部。要注意的是 let 表達(dá)式并不會(huì)被提升。
這也正好可以說明如下代碼可以正常執(zhí)行:

test();
function test(){
    console.log(a)
    var a = 5;
}

可以理解為提升后的代碼:

function test(){
  var a;  // 此時(shí)a為undefined  所以我們打印的時(shí)候就是undefined了
  console.log(a)
  a = 5;
}
test();

不使用var申明的變量提升示例:

test();
function test(){
  b = 5
}
console.log(b)
// 5

可以理解為提升后:

var b;  // undefined
(function test(){
  b = 5
})()
console.log(b)
閉包

閉包是 JavaScript 一個(gè)非常重要的特性,這意味著當(dāng)前作用域總是能夠訪問外部作用域中的變量。
可以理解為訪問你本不能夠訪問到的東西,就是一個(gè)閉包。示例:

function Counter(start) {
    var count = start;
    return {
        increment: function() {
            count++;
        },

        get: function() {
            return count;
        }
    }
}

var foo = Counter(4);   // 此時(shí)如果我們?cè)谕獠恐苯?console.log(count) 是會(huì)拋錯(cuò)的
foo.increment();
foo.get(); // 5

這里,Counter 函數(shù)返回兩個(gè)閉包,函數(shù) increment 和函數(shù) get。這兩個(gè)函數(shù)都維持著對(duì) Counter 函數(shù)內(nèi)部作用域的引用。
所以如果需要訪問或者說獲取Counter中的變量count,只能通過閉包的方式。
關(guān)于閉包,有個(gè)很經(jīng)典的例子:

for(var i = 0; i < 10; i++) {
    setTimeout(function() {
        console.log(i);
    }, 1000);
}
// 10個(gè)10

*想想,為什么。具體可以看:https://segmentfault.com/a/11...
setTimeout 和 setInterval
由于 JavaScript 是異步的,可以使用 setTimeoutsetInterval 來計(jì)劃執(zhí)行函數(shù)。
*注意: 定時(shí)處理不是 ECMAScript 的標(biāo)準(zhǔn),它們?cè)?DOM (文檔對(duì)象模型) 被實(shí)現(xiàn)。

function foo() {}
var id = setTimeout(foo, 1000); // 返回一個(gè)大于零的數(shù)字

當(dāng) setTimeout 被調(diào)用時(shí),它會(huì)返回一個(gè) ID 標(biāo)識(shí)并且計(jì)劃在將來大約 1000 毫秒后調(diào)用 foo 函數(shù)。 foo 函數(shù)只會(huì)被執(zhí)行一次。
所以,通常我們可以認(rèn)為被setTimeout執(zhí)行的函數(shù)是會(huì)被異步執(zhí)行的。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/89592.html

相關(guān)文章

  • 面試寶典

    摘要:有談?wù)劽嬖嚺c面試題對(duì)于前端面試的一些看法。動(dòng)態(tài)規(guī)劃算法的思想及實(shí)現(xiàn)方法幫大家理清動(dòng)態(tài)規(guī)劃的解決思路以及原理方法前端經(jīng)典面試題從輸入到頁面加載發(fā)生了什么這是一篇開發(fā)的科普類文章,涉及到優(yōu)化等多個(gè)方面。極客學(xué)院前端練習(xí)題道練習(xí)題,面試季練練手。 由數(shù)據(jù)綁定和排序引入的幾個(gè) JavaScript 知識(shí)點(diǎn) 在 JavaScript 的數(shù)據(jù)綁定和做簡(jiǎn)單的表格排序中遇到的幾個(gè)知識(shí)點(diǎn) [[JS 基礎(chǔ)...

    neu 評(píng)論0 收藏0
  • 軟件測(cè)試???em>面試題-軟件測(cè)試面試寶典【最新】

    摘要:功能測(cè)試在測(cè)試工作中占的比例最大,功能測(cè)試也叫黑盒測(cè)試。軟件的黑盒測(cè)試意味著測(cè)試要在軟件的接口處進(jìn)行。因此白盒測(cè)試又稱為結(jié)構(gòu)測(cè)試或邏輯驅(qū)動(dòng)測(cè)試。集成測(cè)試也叫組裝測(cè)試,聯(lián)合測(cè)試是單元測(cè)試的邏輯擴(kuò)展。 ...

    dmlllll 評(píng)論0 收藏0
  • 2018駕考寶典面試總結(jié)

    摘要:大家好,我來自駕考寶典。同時(shí),我在駕考寶典也工作一年多了。駕考寶典算不上一線大公司,但我個(gè)人不管是通過工作,平常的積累,還是自主學(xué)習(xí),我覺得還是能和大家分享一些更加實(shí)戰(zhàn)化的面試題。并處理好廣大安卓機(jī)的兼容性。 大家好,我來自駕考寶典。時(shí)間不知不覺進(jìn)入2018金九銀十,下半年的尾聲了,想必很多朋友已經(jīng)看過網(wǎng)上新出的各大廠面試題。同時(shí),我在駕考寶典也工作一年多了。駕考寶典算不上一線大公司,...

    tomener 評(píng)論0 收藏0
  • 2018駕考寶典面試總結(jié)

    摘要:大家好,我來自駕考寶典。同時(shí),我在駕考寶典也工作一年多了。駕考寶典算不上一線大公司,但我個(gè)人不管是通過工作,平常的積累,還是自主學(xué)習(xí),我覺得還是能和大家分享一些更加實(shí)戰(zhàn)化的面試題。并處理好廣大安卓機(jī)的兼容性。 大家好,我來自駕考寶典。時(shí)間不知不覺進(jìn)入2018金九銀十,下半年的尾聲了,想必很多朋友已經(jīng)看過網(wǎng)上新出的各大廠面試題。同時(shí),我在駕考寶典也工作一年多了。駕考寶典算不上一線大公司,...

    EdwardUp 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<