JS教程—容易忽略的概念

1、表达式语句 

 

2、小括号的作用:http://www.voycn.com/article/jszhongxiaokuohaodeyongfazongjie  或  http://www.360doc.com/content/18/0224/11/31710407_732033425.shtml

  • 强制表达式运算

    函数立即执行

    (function(){  
    // ...  
    })();

    先声明后赋值的解构赋值

    let x;
    {x}={x:1,y:1} // 报错 主要还是大括号的原因,js在行首遇到{}会把它当做代码块执行,所以会报错.
    ({x}={x:1,y:1})  // 这里小括号的作用,就是告诉程序。里面是一个表达式处理,而不是一个的代码块。当然首先 里面本身就是可以作为表达式处理才可以。

    如果里面无法进行表达式处理就会报错。 let { x } = {x: 1},中 { x } = {x: 1} 本身就是一个合法表达式。只是在没有 let 情况,js把{ }里面的代码解析成语句了。
    所以用(),显示说明是一个表达式就好不会报错了。

    说明下:表达式本身就是具有返回值。所以使用(),强制表达式运算,运算后还是有返回值,这个是没有改变的。

3、大括号的作用:

  • 对象字面量:
  • 块语句:块语句用于将零个或多个语句组合在一起。块由一对大括号(“花括号”)界定,并包含零个或多个语句和声明。
    个人理解
    • if 后面如果是一个语句就不需要块语句,如果是多个语句执行,就要使用块语句把它们组合起来。
    • 使用空语句可以实现相反的行为,即在需要语句情况下不提供任何语句。用分号;表示。
      如下,if 条件判断后面后面应该有执行语句,而没有。
      if (condition);      // 注意,这个“if”不会产生任何作用!

      空语句结尾,也表示上一个语句结束了,和下面的代码不在一个语句中。这也说明,JS不是通过分号来判断语句是否结束的,分号是一个空语句,所以只要不产生歧异的语句可以不用分号。

 

4、null和undefined的区别:http://t.zoukankan.com/Renyi-Fan-p-13969705.html  或 https://juejin.cn/post/6844903574242066440

  java中只要声明了原生类型,默认就会给一个初始值的;而声明一个包装类型时,默认给的值就是null。
  JavaScript 是动态类型,声明一个变量 不赋值时,根本无法给他默认值。而null是表示“无”的对象,不适合原始值,所以创造了一个undefined。

  JavaScript的最初版本是这样区分的:null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。

  但是,上面这样的区分,在实践中很快就被证明不可行。目前,null和undefined基本是同义的,只有一些细微的差别。

  下面总结下,个人在实践中对他们的总结:

  • null:表示一个 空对象的 值,本质上他还是一个特殊值
  • undefind:表示"缺少值",就是此处应该有一个值,但是还没有定义。即 事实上 没有这个值
                     所以对象在JSON序列化时,会忽略掉undefined的属性。因为undefined值就是告诉程序没有这个属性。

5、label 语句:标记语句是任何带有标识符前缀的语句。你可以使用嵌套在标记语句中的 break 或 continue 语句跳转到对应标记。
即,break 或 continue  本来跳出语句的,变成跳转到指定语句去了。

let str = "";

loop1: for (let i = 0; i < 5; i++) {
  if (i === 1) {
    continue loop1;  // 跳到标签语句中
  }
  str = str + i;
}

console.log(str);
// Expected output: "0234"

总结:label 语句是 需要 break 或 continue 的配合才能起作用。  标签语句只是起一个标记作用,不会改变语句本身的执行流程。

posted @ 2018-04-24 12:40  吴飞ff  阅读(211)  评论(0)    收藏  举报