首頁 > web前端 > js教程 > JavaScript中的原始值與複雜值_javascript技巧

JavaScript中的原始值與複雜值_javascript技巧

WBOY
發布: 2016-05-16 15:21:24
原創
1115 人瀏覽過

 前面的話

  javascript的資料型別可以分為兩種:原始型別和參考型別。原始型別也稱為基本型別或簡單型別,javascript基本資料型別包括Undefined、Null、Boolean、Number和String五種,而參考型別也稱為複雜型別,在Javascript中是Object。與此相對應,它們的值也分別被稱為原始值和複雜值

特性

原始值(primitive value)

簡單的說:原始值是固定而簡單的值,是存放在棧(stack)中的簡單資料段,也就是說,它們的值直接儲存在變數存取的位置.


  原始值是表示Javascript中可用的資料或資訊的最底層形式或最簡單形式。原始類型的值稱為原始值,是因為它們是不可細化的。也就是說,數字是數字,字符是字符,布林值則是true或false,null和undefined就是null和undefined。這些值本身很簡單,不能表示由其他值組成的值

有哪些類型是原始型呢?

原始型別(primitive type)有以下五種型別:Undefined,Null,Boolean,Number,String


我們可以使用typeof來判斷一個是否在某個類型的範圍內.

typeof運算子

對變數或值使用typeof運算子將會傳回下列值之一:

注意:

1.傳回值為字串型別.


2.和原始型別比,還差了個null,這個比較特殊,使用typeof(null),回傳的是"object",我們將null理解成是object的佔位符.

複雜值

  複雜值可以由許多不同類型的javascript物件組成。複雜物件其在記憶體中的大小是未知的,因為複雜物件可以包含任何值,而不是一個特定的已知值


儲存方式

堆疊儲存

  因為原始值佔據空間固定,是簡單的資料段,為了便於提升變數查詢速度,將其儲存在堆疊(stack)中


堆疊存放

  由於複雜值的大小會改變,所以不能將其存放在棧中,否則會降低變量查詢速度,因此其存儲在堆(heap)中,存儲在變量處的值是一個指針,指向存儲對象的記憶體處


訪問方式

按值存取

  原始值是作為不可細化的值進行存儲和操作的,引用它們會轉移其值


var myString = 'foo';
var myStringCopy = myString;
var myString = null;
console.log(myString,myStringCopy);//null,'foo' 
登入後複製

引用訪問

  複雜值是透過引用進行儲存和操作的,而不是實際的值。在建立一個包含複雜物件的變數時,其值是記憶體中的一個引用位址。引用一個複雜物件時,使用它的名稱(即變數或物件屬性)透過記憶體中的參考位址取得該物件值


var myObject = {};
var copyOfMyObject = myObject;//没有复制值,而是复制了引用
myObject.foo = 'bar';//操作myObject中的值
//现在如果输出myObject和copyOfMyObject,则都会输出foo属性,因为它们引用的是同一个对象
console.log(myObject,copyOfMyObject);//Object{foo="bar"} 
登入後複製

比較方式

  原始值採用值比較,而複雜值則採用參考比較。複雜值只有在引用相同的物件(即有相同的位址)時才相等。即使是包含相同物件的兩個變數也彼此不相等,因為它們並沒有指向同一個物件

var price1 = 10;
var price2 = 10;
var price3 = new Number('10');
var price4 = price3;
console.log(price1 == price2);//true
console.log(price1 == price3);//false
price4 = 10;
console.log(price4 == price3);//true
console.log(price4 === price3);//false 
var objectFoo = {same:'same'};
var objectBar = {same:'same'};
console.log(objectFoo == objectBar);//false
var objectA = {foo: 'bar'};
var objectB = objectA;
console.log(objectA == objectB);//true 
登入後複製

動態屬性

  對於複雜值,可以為其添加屬性和方法,也可以改變和刪除其屬性和方法;但簡單值不可以添加屬性和方法


  複雜值支援動態物件屬性,因為我們可以定義對象,然後建立引用,再更新對象,並且所有指向該物件的變數都會獲得更新。一個新變數指向現有的複雜對象,並沒有複製該對象。這就是複雜值有時被稱為引用值的原因。複雜值可以根據需求有任意多個引用,即使物件改變,它們也總是指向同一個物件


var str = 'test';
str.property = true;
console.log(str.property);//undefined  
var objA = {property: 'value'};
var pointer1 = objA;
var pointer2 = pointer1;
objA.property = null;
console.log(objA.property,pointer1.property,pointer2.property);//null null null 
登入後複製

梱包タイプ

コンストラクターによって作成されたオブジェクトとしてプリミティブ値が使用される場合、JavaScript はオブジェクトのプロパティとメソッドを使用できるようにそれをオブジェクトに変換し、オブジェクトのプロパティを破棄してプリミティブ値に戻します。

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板