首页 > 代码库 > 在Javascript中 声明时用"var"与不用"var"的区别,== 和 ===的区别

在Javascript中 声明时用"var"与不用"var"的区别,== 和 ===的区别

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。

总结:

  ==和===的区别:"==" 只要求值相等; "===" 要求值和类型都相等


在Javascript中 声明时用"var"与不用"var"的区别,== 和 ===的区别