首页 > 编程语言 > 详细

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

时间:2017-03-04 00:05:13      阅读:231      评论:0      收藏:0      [点我收藏+]

今天,被问到两个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). == 和 != 比较若类型不同,先偿试转换类型,再作值比较,最后返回值比较结果

而 
(2). === 和 !== 只有在相同类型下,才会比较其值

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

原文:http://www.cnblogs.com/study-everyday/p/6498716.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!