您的位置:首页 > Web前端 > JavaScript

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

2017-05-19 09:44 375 查看

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"=="的作用 == 和 != 比较若类型不同,先偿试转换类型,再作值比较,最后返回值比较结果。
当==两边的内容是字符串时,则比较字符串的内容是否相等。

当==两边的内容是数字时,则比较数字的大小是否相等。

当==两边的内容是对象或者是对象的函数属性时,则比较内存地址是否相等。

(2). ==和===的区别 === 和 !== 只有在相同类型下,才会比较其值。
  ==用于一般比较,===用于严格比较,==在比较的时候可以转换数据类型,===严格比较,只要类型不匹配就返回flase。
总结:
  ==和===的区别:"==" 只要求值相等; "===" 要求值和类型都相等
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java