javascrpt—變量(2)

javascript變量是鬆散類型的本質,決定了它只是特定時間用於保存特定值的一個名字而已,javascript

因爲不存在定義變量的必須保存何種數據類型值的規則,變量的值及數據類型能夠在腳本的生命週期內改變java

變量的數據類型可分爲基本數據類型和引用類型;函數

基本數據類型值指的是簡單的數據段,而引用類型是多個值構成的對象;spa

再將一個值賦給變量時,解析器必須肯定這個值是基本類型仍是引用類型,設計

基本類型:(undefined、null、Number、Boolean、String)是按值訪問的,由於能夠操做保存在變量中的實際的值
引用類型:引用類型的值保存在內存中的對象;指針

javascript不容許直接訪問內存中的位置,即不能直接操做對象的內存空間,
在操做對象時,其實是在操做對象的引用而不是實際的對象,故引用類型的值是按引用訪問的!code

一、咱們不能給基本類型的值添加屬性,儘管這樣不會犯錯對象

1 var person= new Object();
2 person.name='naruto';
3 alert(person.name);
4 name.age='20';
5 alert(name.age);

二、複製變量的值
(1)基本類型:若是從一個變量向另外一個變量複製基本類型的值,會在變量對象上建立一個新值,
而後把該值複製到爲新變量分配的位置上blog

var num1=0;
var num2=num2;

(2)引用類型:當一個變量向另外一個變量複製引用類型的值,一樣會將存儲在對象中的值複製一份到新變量的空間,
不一樣的是,這個值的副本其實是同一個指針,而這個指針指向存儲在堆中的一個對象!
複製結束後兩個變量實際將引用同一個對象生命週期

1 var obj1=new Object();
2 var obj2=obj1;
3 obj1.name='naruto';
4 alert(obj2.name)//naruto

三、值傳遞
ECMAScript中全部函數的參數都是按值傳遞的,也就是說,把函數外部的值複製給函數內部的參數!
基本類型的傳遞如同基本類型的複製,引用類型的傳遞如同引用類型的複製

//基本類型
function addTen(num){
    num+=10;
    return num;
}
var count=20;
var result=addTen(count);
alert(count);//20
alert(result);//30

//引用類型
function setName(obj){
    obj.name='naruto';
}
var person=new Object();
setName(person);
alert(person.name);//naruto


function setName(obj){
    obj.name='naruto';
    
    obj=new Object();
    obj.name='narutowlll';
}
var person=new Object();
setName(person);
alert(person.name);//naruto
//在函數內部重寫obj時,這個變量引用就是一個局部對象,
//這個局部對象在函數執行完當即被銷燬!

四、類型檢測

(1)typeof操做符肯定一個變量是String、Number、Boolean、undefined
若是一個對象是null或對象,typeof會返回Object

 1 var i='naruto';
 2 var j=true;
 3 var k=0;
 4 var u;
 5 var v=null;
 6 var o=new Object();
 7 
 8 alert(typeof i);//string
 9 alert(typeof j);//boolean
10 alert(typeof k);//number
11 alert(typeof u);//undefined
12 alert(typeof v);//object
13 alert(typeof o);//object

(2)instanceof:檢測對象的類型;若是使用instanceof檢測基本類型數據時,則始終返回false;

1 var person=new Object()
2 alert(person instance Object);//true
3 var date=new Date();
4 alert(date istanceof Date)//true
5 var arr=new Array();
6 alert(arr instance Array);//true

 

 

參考:《javascript高級程序設計》第三版

相關文章
相關標籤/搜索