JavaScript权威指南学习笔记(一)

1.可选的分号

JavaScript只有在缺少分号就无法正确解析代码的时候才会填补分号,如下代码

  var a
      a
      =
      3
      console.log(a)

JavaScript将其解析为:

    var a; a=3; console.log(a)

因为JavaScript无法解析 var a a,所有在第一行换行处添加了分号。而第二个a可以与"="、“3"一起解析为"a=3”

①有些时候这些语句的分隔规则会导致一些情况

    var y = x + f
    (a+b).toString()

这段代码会被看做:

    var y = x + f(a+b).toString()

代码被当做一个函数调用了

②如果当前语句和下一行语句合并无法合并解析,JavaScript则在第一行填补分号,这是一个通用规则,但是有两个列外,一个是涉及return,break,continue,一个是涉及"++“和”–"运算符时。

第一个列外:

    return 
    true;

会被解析为:

    retrun;
    true;

而它的本意:

    retrun true;

也就是说return,break,continue不会换行,如果换行了只有在特殊情况下才会报错,很难调试。

第二个列外:

    x
    ++
    y

解析为:

    x;++y

而不是

    x++;y

JavaScript的算术运算

JavaScript的算术运算在溢出,下溢以及被零整除时是不会报错的。

  • 溢出:当数字运算结果超过了JavaScript所能表示的数字上限,结果为一个特殊的无穷大(infinity)值,如果是负数,则结果为负的无穷大。
  • 下溢:是当运算结果无限接近零并比JavaScript能表示的最小值还小的一种情况,这种情况下,JavaScript会返回0,如果为负数,则是-0,-0与0几乎完全一样

NaN

对于NaN来说,它不与任何值相等,并且与自己也不相等,因此可以用x!= x来判断是否为NaN值,或者用函数isNaN()

0与-0

需要注意的是0与-0虽然几乎一样,但是当它们作为除数时,它们并不相等

    var zero = 0
    var negz = 0
    zero === negz //=>true
    1/zero === 1/negz //=>false 正无穷大与负无穷大不相等

包装对象

对于字符串来说,它并不是对象,可是它也有属性,那是因为当引用字符串的属性时,JavaScript会通过调用new String(“字符串”)临时将字符串包装成一个对象,这个对象有字符串的方法,当引用属性结束时,这临时对象就会被销毁。除了字符串,数字和布尔值也是同样的道理,通过Nmuber()和Boolean()构造函数临时创建一个对象。

注意:

 var s = "test";
 s.len = 4;
 var t = s.len;

当执行这段代码时,t是undefined, 因为第二行临时创建了对象,并赋予len属性值为4,在随后便销毁了这个对象,所有当赋值给t时,其实len属性已经不存在了

声明提前

在JavaScript函数里声明的所有变量都被提前至函数体的顶部,如下:

var scope = "global";
function f(){
    console.log(scope);
    var scope = "loacal";
    console.log(scope);
}

函数体内第一行输入的是undefined,因为函数作用域的特性,局部变量在整个函数体内是有定义的,也就是说局部变量覆盖了同名的全局变量,然而只有在执行到var时,局部变量才会被真正的赋值。所以变量是被提升到函数体顶部的,如下:

var scope = "global";
function f(){
    var scope;
    console.log(scope);
    scope = "loacal";
    console.log(scope);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值