javascript 陷阱

版权所有,转载请注明来源http://qyj.iteye.com,违者必究!

 

1、动态类型

javascript是一种松散类型的语言。换句话说,不必提前声明保存在变量中的数据是什么类型。而javascript则会根据赋给变量的数据,自动推断其类型。

如:

//在javascript中声明变量

var number = 5;

var value = 12.34567;

var active = true;

var text = 'qyj.iteye.com';

方便之处:不知道保存什么数据,就可以声明和命名变量。甚至随意改变保存的数据类型。

如:var value = 999;

value = 99.9;

value = false;

当然这样做只是告诉大家javascript可以这样做,但并不提倡甚至反对这样做。

如果你不确定某个变量中保存着什么类型的数据,可以使用typeof操作符:typeof 变量名 ,返回类型。

2、变量提升

在我们的印象里,浏览器会从上到下依次执行javascript代码。但有时候也不一定!比如,下面的代码,你觉得变量i什么时候有定义?

 

var numLoops = 1000;
for(var i=0;i<numLoops;i++){
    console.log(i);
}

 在其他很多语言中,i会到for循环开始才被声明,这符合我们的预期。但由于存在一种叫做变量提升的机制,javascript中的变量会被提升到函数上下文的顶部。对于前面的例子,i实际上在for循环开始之前就有了定义。下面的代码跟上面的代码是等价的:

 

 

var numLoops = 1000;
var i;
for(i=0;i<numLoops;i++){
    console.log(i);
}

 所以,如果变量名字有冲突,变量提升可能就会带来问题。

 

3、函数级作用域

在编程领域,变量作用域这个概念用于区分在哪个环境下可以访问哪些变量。一般很多语言都有块级作用域 ,也就是在当前“块”中,变量才有定义。这里的“块”通常指花括号。但是在javascript中的变量只能限制在函数中(而不是任何块),即在函数中声明的变量只能在函数内部访问。

关键要记住:要想封闭某个值,就得把它们放到函数里。

4、全局命名空间

window在浏览器中是一个顶级的对象,包含所有javascript中能直接访问到的对象。即,你每次都在全局作用域声明新变量,那这个变量就会被加到window对象下面。(“你在污染全局命名空间”)。

解决这个问题有两个简单的办法

a、只在函数里声明变量。

b、只声明一个全局对象,然后把你本来想作为全局变量的值都作为这个全局对象的属性。如:

var qyj = {};

qyj.age = 27;

qyj.sex = '男';

这样,所有的变量都会被关在qyj这个笼子里。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值