JS的几个值得注意的地方

1. 变量的声明

使用var来声明一个变量,然后就可以使用了。如果未声明而使用一个变量,则相当于到全局对象查找这个变量(有点lua metatable的感觉),举例来说:

function () {

var i;

}

这声明一个local变量(local的定义在2中述)i。

如果是这样:

function () {

i = 10;

}

这实际上是在全局对象上插入一个叫做i的属性。

而且变量的声明并不需要一定出现在变量的引用之前。

例如以下代码:

function () {

i = 10;

console.log(i);

var i;

}

i始终都是function内的local变量,相当于是function内的所有变量声明会提到函数最前面。

2. 作用域

js分为local和global作用域,在任何函数外的就是全局作用域,在任何函数内的就是local作用域,而js的local作用域并不是以{}来界定的,而是以函数为单位来进行界定的。

3. ==和===运算符

js有==和===两种比较运算符,前者比较规则稍微宽松(。。。规则实在太多,请参考JavaScript权威指南),后者在前者的基础上增加了一个最先的规则,即比较两个操作数的类型。

对于对象(数组也是对象,然而字符串字面量却是js内建的数据类型)的比较,除非两个变量指向同一个对象实例,否他们不相等(==和===都为false),这和lua的对象很像(lua中还有专门利用这一特性构造唯一键的trick),特别需要注意的是string/String,number/Number。。。这些分别是非对象/对象。

NaN是个奇葩,和任何东西都不相等,包括自身。。。

4. +运算符

js中的+运算符大致上倾向于进行字符串拼接(这可能是因为js更多时候是进行html文本吧)

  1. 如果操作数中有对象且有valueOf方法,则执行它(转换为原始值),否则执行toString,然后执行2。
  2. 如果操作数中有任何一个是字符串,则进行字符串拼接。
  3. 否则执行算数加运算。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值