Javascript聲明和使用變量


1.1變量的聲明

要在程序中使用變量,就必須從聲明變量學起,因為Javascript語法與我們基礎的其他程序語言聲明變量的方法略有不同,但是Javascript語法的變量應用非常強大,使用也非常簡單。

1.1.1聲明和命名變量

要使用變量,就必須聲明變量,可以使用關鍵字var來聲明,如果不使用var關鍵字可能會導致程序不易閱讀。變量區分大小寫。

基本的規則:var 變量名;

(1)聲明一個變量名:var firstName;

  (2)聲明多個變量名,用逗號分隔:var firstName,middleName,lastName;

  (3)在聲明變量時直接為變量賦值:var firstName = "chengmingxiaowu";

  (4)一條語句聲明多個變量,同時為這些變量賦值:var firstName="chengming",middleName="xiao",lastName="wu";

1.1.2變量和標識符的命名規范

變量名必須是一個js標識符,遵循以下標准命名規則

(1)第一個字符必須為字母,下划線(_)或者美元符號($);

  (2)后面可以跟字母、下划線、美元符號、數字,最好不要包含其他符號。

(3)變量名不能是一個關鍵字或者邏輯常量。(true,null,false,underfind)

  (4)變量名在其作用范圍內必須是唯一的。

tip:使用錯誤的變量名在執行時就會導致錯誤,但是大多數瀏覽器不會提示這種語法錯誤。

1.1.3

數據類型可分為簡單數據類型和復雜數據類型

一、簡單的

數據類型 取值范圍
Boolean

true或false。

js也會在適當的時候將值轉換為1和0。

Number

 雙精度浮點型。

兩個數字常量:

(1)Infinity表示無窮大

(2)NaN表示非數字

String

表示一個字符序列,一般使用雙引號或者單引號包圍。除了內存限制以外,對其長度沒有限制。

Underfind

Underfind數值類型僅有一個值,與類型名相同,注意區分大小寫。

當定義了一個變量而未為該變量賦值時,該變量就是underfind.

Null

 Null數值類型僅有一個值,與類型名相同,注意區分大小寫。

當一個用於引用某個對象的變量不再使用時,就可以為該變量賦值為null,

從而該變量就不再引用那個對象了,該變量的值就是空引用。

使用情況:

(1)聲明變量還沒有接收到值;

(2)聲明變量不再包含值;

(3)作為函數的返回值,表明很熟沒有可以返回的值;

(4)作為函數的一個參數,表明省略了一個參數。

二、復雜數據類型

(1)Array數據類型

Array為數組變量,數組可以是連續數字索引的數組也可以是符合數組,並且數組元素的數據類型也可以多種多樣。

(2)Object數據類型

Object是屬性的集合,屬性是用來描述對象特性的。

1.1.4自定義常量和內建常量

常量也是變量,但它是一個用於表示其值永遠不會改變的變量。

用戶可以使用const關鍵字自定義常量;開發可以使用con_或者大寫所有的常量名來區分常量和變量。(IE中的常量定義不生效,所以不推薦自定義的常量。)

以下是常量表:

常量 說明
false 一個表示與true相反的唯一邏輯值,表示邏輯假
Infinity 表示正無窮大 IEEE-754值
-Infinity 表示負無窮大的IEEE-754值
NaN 一個預定義的變量
null 一個可以分配給變量的或由未提供數據的函數返回的特殊值。
true 一個表示與false相反的唯一邏輯值,表示邏輯真
undefind

一個特殊值,通常用於指示變量尚未賦值。

將underfind用於不同的類型轉換函數時,結果也不相同:

(1)String 返回的是 underfind, 轉換為字符串。

(2)Nunber返回的是NaN;

  (3)Object返回的值為新的Object實例;該實例的屬性如果沒有初始化,那么其屬性值為underfind,而非null,

   因為Object並非動態類。

(4)向類型變量賦予值underfind時,改值轉換為該數據類型的默認值。

Tip:null==underfind是true;null===underfind是false;

1.2在程序中使用變量

1.2.1為變量賦值和更改變量值:

1、為變量值賦值,1.1中已經介紹,注意點:

  1)在位現有的變量重新賦值時,無需使用var關鍵字;

  2)不用var關鍵字申明的隱式變量具有全局作用,是全局變量;

2、變量值包含引號:若在變量值中包含引號(雙引號或者單引號),就必須用轉義符(\);但是如果二者交替出現,則無需使用‘\’;

如:var myName="my name is \"chengmingxiaowu\",thank you!";

  var myName="my name is 'chengmingxiaowu',thank you!";

  var myName='my name is "chengmingxiaowu",thank you!';

3、更改變量值:只需為該變量重新賦值即可。

  var  myName = "chengmingxiaowu"; 

    myName = "xiaowu";

4、數據類型的轉換:只需為變量賦一個不同類型的值即可。

5、變量的默認值:如果定義了一個變量,但是沒有賦值,則運行環境會為其指定一個默認值,這個默認值為underfind。

1.2.2使用變量和獲取變量值

變量的值可以相互傳遞,也可以作為函數的參數被處理,或者被直接顯示在網頁上。

1、變量申明的順序:先申明后使用;不申明就會報錯。

2、變量申明的提升:先使用后申明,申明會自動提升到最頂部,但是卻不能將賦值語句提到頂部,所以會返回該變量對應數據類型的默認值。(雖合法,但不推薦。)

1.3變量的傳值和傳址

1.3.1傳值變量-按值傳遞

簡單數據類型是按值進行傳遞的, 這種傳遞類型被成為傳值。當按值傳遞時,將在計算機內存中分配一塊空間並將原復制到其中,是相互獨立的實體。

  var i=10;

  var j=i;

  alert(j)//輸出15

  i=30;

  alert(j)//輸出15

1.3.2傳址變量-按引用傳遞

復雜數據類型可以包含大量和復雜的信息,所以屬於此類型的變量並不包含實際的值,它包含的是對值的引用,這種傳遞類型稱為傳址。

(這種引用類似於指向變量名的別名,在一些程序語言中稱為指針)

  var myArry = ["chengming","xiaowu"];

  var newArry = myArry;

  alert(newArry[1])//返回xiaowu

  myArry[1]="xiaowushi";

  alert(newArry[1])//返回xiaowushi

 1.4內存使用規則-堆和棧

堆和棧都是運行時內存中分配的一個數據去,因此也被成為堆區和棧區,但二者存儲的數據類型和處理速度不同。

(1)堆(heap):用於復雜數據類型的分配空間,例如數組對象,Object對象。它在運行時動態分配內存的,因此存取速度比較慢。

(2)棧(stack):主要存放一些基本類型的變量和對象的引用。優勢速度快,數據共享。缺點:棧中數據大小與生存期是確定的,缺乏靈活性。

1.4.1 棧的使用規則:

  var a=3 首先會在棧中創建一個變量為a的引用,然后查找棧中是否有3這個值,沒有找到,就將3存放進來,然后指向a,接着處理var b=3,在創建完b的引用變量后,直接查找棧中是否有3這個值,因為存在,所以直接指向b 。這樣就出現a和b同時指向3的情況。

此時如果a=4,那么js引擎就會重新搜索棧中是否有4,如果沒有,存放起來,並a指向4,如果已經有了,就指向這個地址,因此a值的改變不會影響到b值。

1.4.2堆的使用:

  當創建數組時,就會在堆內創建一個數組對象,並且在棧內創建一個對數組的引用。

  js堆不需要程序代碼來顯示的釋放,因為堆是由自動的垃圾回收來負責的,各種引擎各不相同,但最基本的原則是,如果占中不存在對堆中某個對象堆的引用,那么就會認為該對象已經不再需要,在垃圾回收時就會清除該對象占用的空間。

  因此,在不需要的時候應該對對象的引用釋放掉,以利於垃圾回收。這樣可以提高性能。最常用的方法就是為其賦值null。

 1.4.3易犯的錯誤

在堆和棧的使用問題上,最易犯錯誤的就是String的使用,例如:

var str1 = new String("abc"); //存放在堆中

var str2 = "abc";//存放在棧中

下面進行邏輯運算來深入了解以下:

(1)存放在棧中

var str1 = "abc";

var str2 = "abc";

alert(str1==str2);//true

alert(str1===str2);//true

(2)存放在堆中

var str1 = new String("abc"); 

var str2 = new String("abc"); 

alert(str1==str2);//false

alert(str1===str2);//false

(3)一個存放在堆中,一個棧中

var str1 = "abc";

var str2 = new String("abc"); 

alert(str1==str2);//true 在進行邏輯等於運算時,會首先將變量轉換成相同的數據類型,然后進行對比。

alert(str1===str2);//false

1.5數據類型的轉換

在js中,有時進行數據運算前會對數據類型進行轉換,分為兩種

(1)強制數據轉換。

可以使用全局函數進行數據類型轉換,這些函數包括parseFloat()、parseInt()、Number()、String()和Boolean()函數。

(2)隱式數據類型轉換,比如賦值的時候。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM