在Javascript中 聲明時用"var"與不用"var"的區別,== 和 ===的區別


今天,被問到兩個JS問題,當時沒回答到重點,問題雖然看起來簡單,但是細節卻馬虎不得,在此做下記錄:

1. 在Javascript中 聲明時用"var"與不用"var"的區別

Javascript聲明變量時

var a = 111;

a = 111;

兩種方式一樣嗎?

var a = 11;

function test4(){
    var a = 22;
}

test4();

console.log(a);

結果是什么呢? 11

這個好理解, 函數內的var a聲明是內部變量,這時結果是第一個a的值.

變動一下如下:

var abc = 11;

function test4(){
    abc = 22;
}

test4();

console.log(abc);

結果是什么呢? 22

再改:

function test4(){
    var aaa = 22;
}

test4();

console.log(aaa);

結果怎樣? 運行報錯了! ReferenceError: aaa is not defined!

改:

function test4(){
    var aaa = 22;
}

test4();

console.log(test4.aaa);

運行不會報錯,輸出結果是 undefined.

函數或者對象構造內聲明的變量是私有的. 外部無法訪問到. 包括原型繼承后的對象. 

可是如果這樣:

function test4(){
    bbb = 33;
}

test4();

console.log(bbb);

結果是 33。

這就是有var 和沒有 var的聲明的區別:

很可怕假如一個大的項目,在這里改變了bbb的值, 並沒有添加var 碰巧整個項目全局變量有個同名bbb被改變,不加var不是只作用在這個函數或對象內. 出了錯誤很難找.

所以書寫代碼必須謹慎. 聲明變量改加的就加不能怕麻煩. 結果是完全不同的.

結論: (1).在函數作用域內 加var定義的變量是局部變量,不加var定義的就成了全局變量

使用var定義
var a = 'hello World';
function bb(){
    var a = 'hello Bill';
    console.log(a);   
}
bb()   // 'hello Bill'
console.log(a);    // 'hello world'
不使用var定義
var e = 'hello world';
function cc(){
    e = 'hello Bill';
    console.log(e);    // 'hello Bill'
}
cc()   // 'hello Bill'
console.log(e)     // 'hello Bill'

(2).在全局作用域下,使用var定義的變量不可以delete,沒有var定義的變量可以delete.也就說明隱含全局變量嚴格來說不是真正的變量,而是全局對象的屬性,因為屬性可以通過delete刪除,而變量不可以。

(3).使用var 定義變量還會提升變量聲明,即

使用var定義:
function hh(){
    console.log(a);
    var a = 'hello world';
}
hh()    //undefined
不使用var定義:
function hh(){
    console.log(a);
    a = 'hello world';
}
hh()    // 'a is not defined'

這就是使用var定義的變量的聲明前提。

2. JS中的!=、== 、!==、===的用法和區別。

var num = 1;
 
var str = '1';
 
var test = 1;
 
test == num   //true 相同類型 相同值
 
test === num  //true 相同類型 相同值
 
test !== num  //false test與num類型相同,其值也相同, 非運算肯定是false
 
 
num == str   //true  把str轉換為數字,檢查其是否相等。
 
num != str   //false  == 的 非運算
 
num === str  //false  類型不同,直接返回false
 
num !== str  //true   num 與 str類型不同 意味着其兩者不等 非運算自然是true啦

(1). JavaScript"=="的作用

       == 和 != 比較若類型不同,先償試轉換類型,再作值比較,最后返回值比較結果。

  1. 當==兩邊的內容是字符串時,則比較字符串的內容是否相等。
  2. 當==兩邊的內容是數字時,則比較數字的大小是否相等。
  3. 當==兩邊的內容是對象或者是對象的函數屬性時,則比較內存地址是否相等

(2). ==和===的區別

      === 和 !== 只有在相同類型下,才會比較其值。

  ==用於一般比較,===用於嚴格比較,==在比較的時候可以轉換數據類型,===嚴格比較,只要類型不匹配就返回flase

總結:

  ==和===的區別:"==" 只要求值相等; "===" 要求值和類型都相等

 


免責聲明!

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



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