国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

變量的值

noONE / 2724人閱讀

摘要:在將一個值賦值給變量時,解析器會確定值的類型。添加屬性變量的值是復雜數據類型時,可以簡單的為其添加屬性。賦值變量的值從一個變量向另一個變量復制值時,會為新的變量分配位置,然后把變量的值復制到該位置上。

ECMAScript 的變量是松散類型的,也就是說可以保存任何類型的數據。數據的類型分為簡單數據類型和復雜數據類型。簡單數據類型有: Undefined、Null、Boolean、Number和 String;復雜數據類型只有一種,就是Object。在將一個值賦值給變量時,解析器會確定值的類型。如果是簡單類型,直接保存在變量中,如果是復雜類型,則把值保存在內存中,而把值的引用保存在變量中。也就是說變量的值有兩種:簡單的數據類型的值或者復雜數據類型的引用。因此,在操作變量時,就會有所不同。

1、添加屬性

變量的值是復雜數據類型時,可以簡單的為其添加屬性。這個很容易理解,而當變量的值是某些簡單的數據類型時,為其添加屬性也不會報錯,但之后卻不能訪問,如下:

 
var person= "xiaoming";
name.age = 27;
alert(name.age); //undefined

這是因為JavaScript引擎在處理添加屬性的代碼時,會在內部臨時創建一個對應包裝類型(這里是String類型)的臨時對象, 并把對基本類型的操作代理到對這個臨時對象身上,但在操作完成之后,臨時對象就扔掉了,下次訪問時,重新建立新的臨時對象,添加的屬性并不會 保存。有時,在代碼中直接調用基本數據類型的方法的方法也是同樣的道理。因此,只能給復雜數據類型的值添加屬性。

2、賦值變量的值

從一個變量向另一個變量復制值時,會為新的變量分配位置,然后把變量的值復制到該位置上。不管變量的中保存的是基本數據類型的值,還是復雜數據類型的引用,都是直接把變量中保存的值直接賦值并保存到新的位置上面。

簡單的數據類型很好理解,復雜的數據類型可以參照下圖:

變量obj2復制的是obj1中保存的對象的引用,復制之后,obj1和obj2中分別保存一個指向該對象的引用。

3、傳遞參數

ECMAScript 中所有函數的參數都是按值傳遞的。也就是說在傳遞參數時,實際上就是把變量中保存的值復制了一遍,保存在對應的參數中,從而變成了函數內部的一個變量。這時,需要注意的一點時,對于簡單的數據類型,新的變量(參數)和外部的變量已經沒有聯系了。而對于復雜數據類型,因為兩個變量中保存的都是對象的引用,因此兩個變量還是僅僅聯系在一起的,如下:

var a = 3;
var o = { name:"xiaoming" };
function fn(obj, num){
     num += 10;
     o.name = "hh";
     return num;
}
var res = fn();

alert(res);     //13
alert(a);     //3
alert(o.name); //"hh"

4、檢測類型

正如開頭說的變量是松散的,為了確保代碼可以正確的執行,很多時候都需要檢測變量值的類型。變量的值是簡單的數據類型時(null除外),只需要使用typeof操作符,就可以很簡單的檢測出來。但變量的值是復雜數據類型的引用時,就有點麻煩了,使用typeof始終只會返回‘object’。如果知識簡單的檢測,可以使用 instanceof 操作符。使用如下:

res = obj instanceof constructor

只要變量是給定復雜數據類型的實例,那么instanceof 操作符就會返回 true。需要說的一點是, 所有復雜數據類型的值都是 Object 的實例,使用這個操作符檢測是不是Object構造函數的實例時,都會返回true。

使用這種方式檢測在大多數情況下都是沒有問題的,但當頁面的中存在嵌套的框架或者在一些特殊的瀏覽器中就會出現問題。例如,在一個frame中定義了一個數組arr,而在最外層的window環境中檢測,就會返回false。為了確保檢測結果的正確,可以使用Object原聲的toString方法,對于任何的復雜數據類型,這個方法都會返回“ [object NativeConstructorName]”格式的字符串,例如:

Object.prototype.toString.call([])          //"[object Array]"

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/82093.html

相關文章

  • 變量和作用域

    摘要:當代碼在一個環境中執行時,會創建變量對象的一個作用域鏈,作用域鏈的用途,是保證對執行環境有權訪問的所有變量和函數的有序訪問。作用域鏈的下一個變量對象則來自下一個包含環境。 前言 JavaScript中變量是松散類型,這樣它只在特定的時間內用于保存一個特定的值。由于不存在定義某個變量必須要保存何種數據類型的規則,變量的值和其數據類型可以在腳本的生命周期內改變。 1. 基本類型和引用類型的...

    Codeing_ls 評論0 收藏0
  • Java中的Volatile關鍵字

    摘要:變量可見性問題的關鍵字保證了多個線程對變量值變化的可見性。只要一個線程需要首先讀取一個變量的值,基于這個值生成一個新值,則一個關鍵字不足以保證正確的可見性。 Java的volatile關鍵字用于標記一個Java變量為在主存中存儲。更確切的說,對volatile變量的讀取會從計算機的主存中讀取,而不是從CPU緩存中讀取,對volatile變量的寫入會寫入到主存中,而不只是寫入到CPU緩存...

    JohnLui 評論0 收藏0
  • 值類型、執行環境和垃圾回收

    摘要:中的變量是松散類型的即它在不同的時期可以有不同類型的值這也是最強大的的特性之一基本類型和引用類型的值的值類型有兩種基本類型引用類型。 ECMAscript中的變量是松散類型的,即它在不同的時期可以有不同類型的值,這也是ECMAscript最強大的的特性之一. 基本類型和引用類型的值 javascript的值類型有兩種:基本類型 引用類型。基本類型的值是指的簡單的數據段,基本類型有五種,...

    darkbaby123 評論0 收藏0
  • Java并發編程之原子性操作

    摘要:將與當前線程建立一對一關系的值移除。為了讓方法里的操作具有原子性,也就是在一個線程執行這一系列操作的同時禁止其他線程執行這些操作,提出了鎖的概念。 上頭一直在說以線程為基礎的并發編程的好處了,什么提高處理器利用率啦,簡化編程模型啦。但是磚家們還是認為并發編程是程序開發中最不可捉摸、最詭異、最扯犢子、最麻煩、最惡心、最心煩、最容易出錯、最不符合社會主義核心價值觀的一個部分~ 造成這么多最...

    instein 評論0 收藏0
  • JavaScript學習筆記 - 變量、作用域與內存問題

    摘要:語句中的塊語句對來說,將會指定對象添加到作用域鏈中。在嚴格模式下,初始化未經聲明的變量會導致錯誤。查詢標識符搜索過程從作用域鏈的前端開始,向上逐級查詢與給定名字匹配的標識符。 本文記錄了我在學習前端上的筆記,方便以后的復習和鞏固。 4.1基本類型和引用類型的值 ECMAScript變量可能包含兩種不同數據類型的值:基本類型值和引用類型值。基本類型指的是簡單的數據段,而引用類型值指那些可...

    lavnFan 評論0 收藏0

發表評論

0條評論

noONE

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<