最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解析Javascript中難以理解的11個問題

 更新時間:2013年12月09日 09:10:16   作者:  
這篇文章主要是對Javascript中難以理解的11個問題進行了詳細的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助

1.原始值與引用值

原始值存放在棧里, 引用值存放在堆里. 如程序:

復制代碼 代碼如下:

function Person(id,name,age){
 this.id = id;
 this.name = name;
 this.age = age;
}

var num = 10;
var bol = true;
var str = "abc";
var obj = new Object();
var arr = ['a','b','c'];
var person = new Person(100,"笨蛋的座右銘",25);

2.undefined和null

undefined: 變量未定義; 是Undefined類型的專屬值;

null:引用未分配; 是Null類型的專屬值.

typeof(undefined) == undefined;
typeof(null) == object;
undefined==null;
undefined!==null;
null instanceof Object == false;
undefined instanceof Object == false;

雖然有Undefined和Null類型, 但是通過下面的例子說明這兩個類型是不可見的, 也就是說我們只能使用他們的值:

alert(undefined instanceof Undefined);
alert(null instanceof Null);

3.偽數(shù)組

特點:
1) 具有l(wèi)ength屬性;

2) 像數(shù)組一樣按索引順序存取數(shù)據(jù);

3) 不具備數(shù)組特有的操作數(shù)據(jù)的方法如push, pop, slice...

偽數(shù)組都可以通過Array.prototype.slice轉(zhuǎn)換為真正的數(shù)組:

var faceArray = {0: 'a', 1: 'b', length: 2}//標準的偽數(shù)組;

var realArray = Array.prototype.slice.call(fakeArray);

js中的偽數(shù)組:arguments, node.childNodes, document.getElementsByTagName()...

IE中的問題 : IE中node.childNodes是不能用slice轉(zhuǎn)化的.

Jquery中的偽數(shù)組 : Jquery本身就是一個偽數(shù)組:

alert($('.class1').length); alert($('.class1').[0].tagName);

4.關于簡單類型的字面量

var a = 1; b = true, c = "ccc";

字面量看起來有類型

alert(typeof a);//number
alert(typeof b);//boolean
alert(typeof c);//string

但是通過instanceof卻測不出來

alert(a instanceof Number)//false
alert(a instanceof Object)//false
alert(b instanceof Boolean)//false
alert(b instanceof Object)//false
alert(c instanceof String)//false
alert(c instanceof Object)//false

5.函數(shù)的prototype屬性和對象實例的內(nèi)部prototype屬性

每個function(構造函數(shù))都有一個prototype屬性, 每個對象實例都有一個不可見的(mozilla把它公開了, 可以通過__proto__來取得)內(nèi)部的prototype屬性, 它指向構造函數(shù)的prototype屬性. prototype還可以有它自己的prototype屬性, 這構成了prototype鏈,  Object是最頂?shù)膶ο? 所以所有的prototype鏈最終會指向Object.prototype. 當訪問對象實例的屬性/方法的時候, 從對象實例自己開始搜索, 若果搜索不到, 沿著prototype鏈向上搜索, 直到Object.prototype.prototype == null 為止.

6.構造函數(shù)的一個小秘密

復制代碼 代碼如下:

var s = new function(){return "sss"};
alert(s);//[object Object]
s = new function(){return new String("sss")};
alert(s);//sss

關于這段代碼的解釋:

只要 new 表達式之后的 constructor 返回(return)一個引用對象(數(shù)組,對象,函數(shù)等),都將覆蓋new創(chuàng)建的匿名對象,如果返回(return)一個原始類型(無 return 時其實為 return 原始類型 undefined),那么就返回 new 創(chuàng)建的匿名對象.


7.對象的創(chuàng)建的過程

復制代碼 代碼如下:

function Person(name){
        this.name = name;   
}
Person.prototype = {
        getName: function(){return this.name}   
};

var p = new Person('zhangsan');


解密p的創(chuàng)建過程:

◦創(chuàng)建一個build-in object對象obj并初始化;

◦將p的內(nèi)部[[Prototype]]指向Person.prototype;

◦將p作為this,使用arguments參數(shù)調(diào)用Person的內(nèi)部[[Call]]方法, 即執(zhí)行Person函數(shù)體, 并返回返回值, 如果沒有return, 則返回undefined;

◦如果前一步返回的是Object類型, 則返回這個值給p, 否則返回obj.

8.對象的自有屬性和繼承屬性

復制代碼 代碼如下:

function Person(name){
        this.name = name;   
}
Person.prototype = {
        type: 'human',
        getName: function(){return this.name}   
};
var p = new Person('zhangsan');
alert(p.hasOwnProperty('type'));//false
p.type = 'ren';
alert(p.hasOwnProperty('type'));//true

運行結果很明確,對象的屬性無法修改其原型中的同名屬性,而只會自身創(chuàng)建一個同名屬性并為其賦值。

9.函數(shù)對象的創(chuàng)建過程

創(chuàng)建一個build-in object對象fn;

將fn的內(nèi)部[[Prototype]]設為Function.prototype;

設置內(nèi)部的[[Call]]屬性,它是內(nèi)部實現(xiàn)的一個方法,處理函數(shù)調(diào)用的邏輯。(簡單的理解為指向函數(shù)體);

設置fn.length為funArgs.length,如果函數(shù)沒有參數(shù),則將fn.length設置為0;

fn.prototype的constructor指向fn自己;

返回fn.

10.instanceof的原理

查看a是不是B的實例, 就是看B的prototype(構造函數(shù)的prototype屬性)指向的對象在不在a的原形鏈上.

11.關于Function和Object的猜測

alert(Function instanceof Function);//true
alert(Function instanceof Object);//true  
alert(Object instanceof Function);//true
alert(Object instanceof Object);//true

想了好久, 沒有想透......

相關文章

  • javascript實現(xiàn)消滅星星小游戲簡單版

    javascript實現(xiàn)消滅星星小游戲簡單版

    消滅星星是一款經(jīng)典的益智手游,單位里看到同事天天在手機上玩的游戲,現(xiàn)在也有web版了,出于業(yè)余愛好,自己嘗試用javascript實現(xiàn)了下,就是略簡單了點,文中給出了完整的實例代碼,大家可以自行完善??!下面來一起看看吧。
    2016-11-11
  • js代碼實現(xiàn)多人聊天室

    js代碼實現(xiàn)多人聊天室

    這篇文章主要為大家詳細介紹了js代碼實現(xiàn)多人聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 詳解jQuery插件開發(fā)方式

    詳解jQuery插件開發(fā)方式

    本文介紹了jQuery擴展、私有域、定義插件的基本步驟等知識,有需要的朋友可以看下
    2016-11-11
  • OpenLayers3實現(xiàn)鼠標移動顯示坐標

    OpenLayers3實現(xiàn)鼠標移動顯示坐標

    這篇文章主要為大家詳細介紹了OpenLayers3實現(xiàn)鼠標移動顯示坐標,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 基于JavaScript實現(xiàn)手機短信按鈕倒計時(超簡單)

    基于JavaScript實現(xiàn)手機短信按鈕倒計時(超簡單)

    在淘寶等購物網(wǎng)站,我們都會看到一個發(fā)送短信倒計時的按鈕,究竟是如何實現(xiàn)的呢?下面小編通過本篇文章給大家分享一段代碼關于js實現(xiàn)手機短信按鈕倒計時,需要的朋友參考下
    2015-12-12
  • JS實現(xiàn)電腦虛擬鍵盤打字測試

    JS實現(xiàn)電腦虛擬鍵盤打字測試

    這篇文章主要為大家詳細介紹了JS實現(xiàn)電腦虛擬鍵盤打字測試,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • JavaScript實現(xiàn)動態(tài)網(wǎng)頁時鐘

    JavaScript實現(xiàn)動態(tài)網(wǎng)頁時鐘

    這篇文章主要介紹了JavaScript實現(xiàn)動態(tài)網(wǎng)頁時鐘,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • JavaScript實現(xiàn)在頁面間傳值的方法

    JavaScript實現(xiàn)在頁面間傳值的方法

    這篇文章主要介紹了JavaScript實現(xiàn)在頁面間傳值的方法,涉及javascript傳值的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • ES6 十大特性簡介

    ES6 十大特性簡介

    這篇文章主要介紹了ES6 十大特性的相關資料,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下
    2020-12-12
  • 詳解vue.js根據(jù)不同環(huán)境(正式、測試)打包到不同目錄

    詳解vue.js根據(jù)不同環(huán)境(正式、測試)打包到不同目錄

    這篇文章主要介紹了詳解vue.js根據(jù)不同環(huán)境(正式、測試)打包到不同目錄,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07

最新評論

宜良县| 岳阳县| 黎城县| 临邑县| 郴州市| 陵川县| 惠安县| 吴川市| 鸡西市| 莱阳市| 怀柔区| 鄂伦春自治旗| 屯昌县| 香河县| 商城县| 孟连| 成安县| 赤城县| 历史| 拜城县| 昌吉市| 康定县| 恩施市| 丰城市| 宜城市| 芒康县| 潮安县| 南丹县| 东方市| 崇礼县| 汝南县| 柏乡县| 祁阳县| 司法| 崇阳县| 新竹市| 拉萨市| 鹿邑县| 洛扎县| 延边| 梅河口市|