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

資訊專欄INFORMATION COLUMN

Javascript變量的注意要點(diǎn)

booster / 1231人閱讀

摘要:如很明顯可以看到,實(shí)際上是函數(shù)的局部變量。簡(jiǎn)單的說(shuō)就是,復(fù)制給參數(shù),在函數(shù)內(nèi)部是局部變量,無(wú)論怎么變化,都不影響的變化。

ECMAScript 變量可能包含兩種不同數(shù)據(jù)類型的值:基本類型值和引用類型值。

基本類型和引用類型的值

基本類型值(String,Number,Boolean,Null,Undefined)指的是簡(jiǎn)單的數(shù)據(jù)段;引用類型值(保存在內(nèi)存中的對(duì)象)指的是那些可能由多個(gè)值構(gòu)成的對(duì)象。5種基本類型值的討論見(jiàn) JavaScript數(shù)據(jù)類型的一些注意要點(diǎn)
值得注意的是,很多語(yǔ)言中,字符串以對(duì)象的形式來(lái)表示。但在ECMAScript 中則放棄了這一點(diǎn)。

動(dòng)態(tài)的屬性

動(dòng)態(tài)的屬性:動(dòng)態(tài)地為引用類型值添加屬性。對(duì)于引用類型的值,可以為其添加、改變和刪除屬性和方法。如:

var persons = new Object();
persons.name = "Oliver";
document.write(persons.name); //"Oliver"

在上面這個(gè)例子中,變量persons 儲(chǔ)存了一個(gè)對(duì)象。persons 就是變量,name 就是屬性,“Oliver”就是賦值給persons.name 的普通字符串。最后又通過(guò)document.write 訪問(wèn)了這個(gè)name 屬性。如果對(duì)象不被銷毀或者這個(gè)屬性不被刪除,則這個(gè)屬性將一直存在。

但是,我們不能給基本類型的值添加屬性,盡管這樣做不會(huì)導(dǎo)致任何錯(cuò)誤。如:

var name = "Oliver";
name.age = 18;
document.write(name.age); //undefined

所以說(shuō),只能用引用類型值動(dòng)態(tài)地添加屬性。

復(fù)制變量值

復(fù)制變量值:從一個(gè)變量向另一個(gè)變量復(fù)制基本類型值和引用類型值。

復(fù)制基本類型值

非常簡(jiǎn)單,如:

var x = 1;
var y = x;
document.write(y); //1

supereasy 在這里,復(fù)制之后,x 和y 完全獨(dú)立,互不影響。

復(fù)制引用類型值

當(dāng)從一個(gè)變量向另一個(gè)變量復(fù)制引用類型的值時(shí)。與基本類型值不同的是,這個(gè)值的副本實(shí)際上是一個(gè)指針,而這個(gè)指針指向存儲(chǔ)在堆中的一個(gè)對(duì)象。如:

var persons = new Object();
persons.name = "Oliver";
var child = persons;
document.write(child.name); //"Oliver"

復(fù)制操作結(jié)束后,兩個(gè)變量實(shí)際上將引用同一個(gè)對(duì)象。改變其中一個(gè)變量,就會(huì)影響另一個(gè)變量。

傳遞參數(shù)

傳遞參數(shù):函數(shù)外部的值復(fù)制給函數(shù)內(nèi)部的參數(shù)。實(shí)際上,就跟把值從一個(gè)變量復(fù)制到另一個(gè)變量一樣。該怎么操作怎么操作。

向參數(shù)傳遞基本類型的值(參數(shù)是按值傳遞的,復(fù)制給局部變量)

向參數(shù)傳遞基本類型的值時(shí),被傳遞的值會(huì)被復(fù)制給一個(gè)局部變量。如:

function add(x){
    x = x + 10;
    return x;
}
var num = 1;
document.write(num); //1
var result = add(num);
document.write(result); //11

很明顯可以看到,x 實(shí)際上是函數(shù)的局部變量。調(diào)用這個(gè)變量時(shí),num 作為參數(shù)被傳遞給函數(shù),這個(gè)變量的值是1。在函數(shù)內(nèi)部,x 被加上了10 但這病不影響外部的num。

簡(jiǎn)單的說(shuō)就是,num 復(fù)制給參數(shù)x,x 在函數(shù)內(nèi)部是局部變量,無(wú)論x 怎么變化,都不影響num 的變化。*

向參數(shù)傳遞引用類型的值(參數(shù)是按值傳遞的,傳遞地址)

向參數(shù)傳遞引用類型的值時(shí),會(huì)把這個(gè)值在內(nèi)存中的地址復(fù)制給一個(gè)局部變量,因此在這個(gè)局部變量的變化會(huì)反映在函數(shù)的外部。如:

function set(obj){
    obj.name = "Oliver";
}
var persons = new Object();
set(persons);
document.write(persons.name); //"Oliver"

但是

但是

但是

一定要注意的是參數(shù)不!是!按!引!用!傳!遞!的!

看下面這個(gè)例子:

function set(obj){
    obj.name = "Oliver";
    obj = new Object();
    obj.name = "Troy"
    document.write(obj.name); //"Troy"
}
var persons = new Object();
set(persons);
document.write(persons.name); //"Oliver"

上面這個(gè)說(shuō)明了當(dāng)函數(shù)內(nèi)部重寫obj 時(shí),這個(gè)變量引用的就是一個(gè)局部對(duì)象了。而這個(gè)局部對(duì)象會(huì)在函數(shù)執(zhí)行完畢后立即被銷毀??!這也是為什么函數(shù)內(nèi)部返回了obj.name 的值是"Troy";函數(shù)外部返回了obj.name 的值則是"Oliver"的原因了。

所以說(shuō),雖然局部作用域中修改的對(duì)象會(huì)在全局作用域中反映出來(lái),但仍然不能說(shuō)明參數(shù)是按引用傳遞的。

所以還是那句話,一定要注意

參數(shù)不!是!按!引!用!傳!遞!的!

檢測(cè)類型

毋庸置疑,檢測(cè)基本數(shù)據(jù)類型時(shí),最佳的工具是typeof操作符。如:

var a = "abc";
var b = true;
var c = 21;
var d = null;
var e;
var f = new Object();
document.write(typeof a + "
"); //string document.write(typeof b + "
"); //boolean document.write(typeof c + "
"); //number document.write(typeof d + "
"); //object document.write(typeof e + "
"); //undefined document.write(typeof f + "
"); //object

而檢測(cè)引用類型的值時(shí),最佳的工具是instanceof操作符。如:

var array = new Array;
document.write(array instanceof Array); //true;
var obj = new Object();
document.write(obj instanceof Array); //false;
document.write(obj instanceof Object); //true;

語(yǔ)法是:

result = variable instanceof constructor

所有引用類型的值都是Object 的實(shí)例。因此在檢測(cè)一個(gè)引用類型值和Object 構(gòu)造的函數(shù)時(shí),instanceof 操作符始終會(huì)返回true。

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

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

相關(guān)文章

  • Javascript內(nèi)存注意要點(diǎn)

    摘要:垃圾收集具有自動(dòng)垃圾收集機(jī)制。管理內(nèi)存優(yōu)化內(nèi)存的最佳方式,就是為執(zhí)行中的代碼只保存必要的數(shù)據(jù)。一般適用于大多數(shù)的全局變量和全局對(duì)象的屬性。如執(zhí)行完畢后,變量被銷毀手動(dòng)解除的引用解除一個(gè)值的引用并不意味著自動(dòng)回收該值所占的內(nèi)存。 垃圾收集 JavaScript 具有自動(dòng)垃圾收集機(jī)制。 標(biāo)記清除 JavaScript 中最常用的垃圾收集方式是標(biāo)記清除。 當(dāng)變量進(jìn)入環(huán)境(如在函數(shù)中聲明一個(gè)...

    liaosilzu2007 評(píng)論0 收藏0
  • JavaScript函數(shù)表達(dá)式——“函數(shù)模仿塊級(jí)作用域及函數(shù)私有變量注意要點(diǎn)

    摘要:模仿塊級(jí)作用域在塊級(jí)語(yǔ)句中定義的變量,實(shí)際上是包含函數(shù)中而非語(yǔ)句中創(chuàng)建的。避免對(duì)全局作用域產(chǎn)生不良影響這種方式可以通過(guò)創(chuàng)建私有作用域,避免對(duì)全局作用域產(chǎn)生不良影響。一般包括函數(shù)的參數(shù)局部變量和內(nèi)部定義的其他函數(shù)。 模仿塊級(jí)作用域 在塊級(jí)語(yǔ)句中定義的變量,實(shí)際上是包含函數(shù)中而非語(yǔ)句中創(chuàng)建的。如: function outputNumbers(x){ for (var i = 0;...

    archieyang 評(píng)論0 收藏0
  • JavaScript 代碼優(yōu)化和部署——“可維護(hù)性”注意要點(diǎn)

    摘要:代碼約定可讀性以下地方需要進(jìn)行注釋函數(shù)和方法注釋參數(shù)代表什么,是否有返回值大段代碼描述任務(wù)的注釋復(fù)雜的算法變量和函數(shù)命名變量用名詞函數(shù)名用動(dòng)詞開(kāi)頭等返回布爾值類型的函數(shù)用等合乎邏輯不用擔(dān)心太長(zhǎng)變量類型透明化方法一初始化,如下推薦方法二匈牙利 代碼約定 可讀性 以下地方需要進(jìn)行注釋: 函數(shù)和方法:注釋參數(shù)代表什么,是否有返回值; 大段代碼:描述任務(wù)的注釋; 復(fù)雜的算法; Hack 變...

    scwang90 評(píng)論0 收藏0
  • Javascript引用類型——“Object類型”注意要點(diǎn)

    摘要:類型關(guān)于引用類型的概念引用類型引用類型的值對(duì)象是引用類型的一個(gè)實(shí)例對(duì)象是某個(gè)特定引用類型的實(shí)例新對(duì)象用操作符后跟一個(gè)構(gòu)造函數(shù)來(lái)創(chuàng)建的如代碼這行代碼創(chuàng)建了引用類型的一個(gè)新實(shí)例,然后把該實(shí)例保存在了變量中。使用的構(gòu)造函數(shù)是。 Object 類型 關(guān)于引用類型的概念: 引用類型:引用類型的值(對(duì)象)是引用類型的一個(gè)實(shí)例; 對(duì)象:是某個(gè)特定引用類型的實(shí)例; 新對(duì)象:用new 操作符后跟一個(gè)構(gòu)...

    Codeing_ls 評(píng)論0 收藏0
  • Javascript執(zhí)行環(huán)境和作用域注意要點(diǎn)

    摘要:所以,全局執(zhí)行環(huán)境的變量對(duì)象始終都是作用域鏈中的最后一個(gè)對(duì)象。搜索過(guò)程從作用域鏈的最前端開(kāi)始,逐級(jí)向后回溯,直到找到標(biāo)識(shí)符為止。查詢標(biāo)識(shí)符搜索過(guò)程就是沿作用域鏈向上查詢的過(guò)程。 執(zhí)行環(huán)境 執(zhí)行環(huán)境就是環(huán)境,是js中最重要的概念。執(zhí)行環(huán)境定義了變量或函數(shù)有權(quán)訪問(wèn)的其他數(shù)據(jù)。每個(gè)執(zhí)行環(huán)境都有一個(gè)與之相關(guān)的變量對(duì)象(我們編寫的代碼無(wú)法訪問(wèn)這個(gè)對(duì)象)。 全局執(zhí)行環(huán)境(是最外圍的執(zhí)行環(huán)境。在W...

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

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

0條評(píng)論

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