语法

  语句表达式

      句子是完整表达某个意思的一组词,由一个或多个短语组成,他们之间由标点符号或者连接词连接起来。

      语句相当于句子,表达式相当于短语,运算符则相当于标点符号和连接词。

          JavaScript 中表达式可以返回一个结果值。

            var a = 3 * 6;

            var b = a;

              b;

          var a = 3 * 6;   var b = a;   声明语句,因为它声明了语句

          a = 3 * 6;   b = a;    表达式语句

   语句的结果值

      表达式的副作用

        var   a =  42;

         var b = a++;

        a;   // 43

          b;  // 42

          a++   首先返回变量 a 的当前值 42 (在将值赋给b),然后将 a 的值加 1;

          ++ 在前面时,如++a, 它的副作用将(a递增)产生在表达式返回结果之前而 a++ 的副作用则产生在之后。

          ++a++ 会产生 ReferenceError错误

          var a = 42;

          var b = (a++);

            a; // 43

            b; // 42

      可以使用语句系列运算符将多个独立的表达式语句串联成一个语句:

          var a = 42,b;

            b = (a++,a)

            a; // 43

            b; // 43

     delete 运算符用来删除对象中属性和数组中的元素。

        var obj = {

            a:42

        };

        obj.a;         // 42

        delete obj.a;   // true

        obj.a;              // undefined

        function vowels(str){

              var matches;

              if(str) {

                  // 提取所有元音字母

                  matches = str.match(/[aeiou]/g);

                  if(matches) {

                    return matches;

                  }

              }

            }

         vowels("Hello World"); // ["e","o","o"]

      利用赋值语句的副作用将两个if 语句合二为一

          function vomels (str){

                var matches;

                  // 提取所有元素字母

                if(str && (matches = str.match(/[aeiou]/g))){

                    return matches;

                }

          }

          vowels("Hello World");   // ["e","o","o"]

      上下文规则

        1.大括号

            对象常量

              // 假定 函数 bar() 已经定义

                var a = {

                    foo: bar()

                 }

            标签

              // 假定 函数 bar() 已经定义

                {

                  foo: bar()

                }

            代码块

              [] + {}; // "[object Object]"

              {} + []; // 0

            对象解构

              function getData() {

                    // ..

                    return {

                        a: 42,

                        b: "foo"

                    };

                }

                var { a , b } = getData();

                console.log(a,b); // 42 "foo"

                {...} 还可以用作函数命名参数的对象解构,方便隐式地对象属性赋值。

              function foo({a,b,c}){

                // 不在需要这样:

                //  var  a = obj.a, b = obj.b, c = obj.c

                  console.log(a,b,c)

                }

              foo({

                  c: [1,2,3],

                  a: 42,

                  b:"foo"

              });   // 42 "foo" [1,2,3]

      运算符优先级

          var a = 42;

          var b = "foo";

          a && b;  // "foo"

          a || b; // 42

      短路

        对于 && 和 || 来说,如果从左边的操作数能够得出结果,就可以忽略右边的操作数,我们将这种现象称为短路。

            a && b || c ? c || b ? a : c && b : a

          因为 && 运算符的优先级高于 ||, 而 || 的优先级又高于 ? :。

            (a && b || c) ? (c || b) ? a : (c && b) : a

      关联

         运算符的关联不是从左到右就是从右到左,这取决于组合是从左开始还是从右开始。

          var  a = foo() && bar();

        先执行 foo()  遵循从左到右的执行循序

          var a , b , c;

          a = b = c = 42;

        实际上是这样处理的   a = (b = ( c = 42))

         var  a  = 42;

           var b = "foo";

           var c = false;

           var d = a && b || c ? c || b ? a : c && b : a;

          d;   // 42

        ((a && b) || c) ? ((c || b) ? a : (c && b)) : a

            现在来逐一执行

            1.(a && b) 结果为 “foo”.

            2."foo"  || c 结果为 “foo”.

            3,第一个 ? 中 “foo” 为真。

            4.(c || b) 结果为 "foo".

            5.第二个 ? 中, “foo” 为真值。

            6.a 的值为 42

       错误

        在编译阶段发生错误叫做早期错误,语法错误是早期错误的一种,使用 try..catch来捕获

        语法错误浏览器一般报 SyntaxError

    提前使用变量

        暂时性死区  TDZ

        let 作用域块

          {

            a = 2; // ReferenceError

            let a;

          }

      函数参数

        function foo(a = 42, b = a + 1 ){

            console.log(a,b)

        }

        foo(); //  42 43

        foo(undefined);  // 42 43

        foo(5);     // 5 6

        foo(void 0, 7);       // 42 7

        foo(null )             // null 1

    try.. finally

      finally中的代码总会在try 之后执行,如果有catch 的话则在catch 之后执行。

      可以将finally  中的代码看做一个回调函数,总是在最后一个执行。

    switch

      可以把它看做 if..else if.. else 的简化版。

        switch (a) {

            case 2:

              // 执行一些代码

              back;

            case 42:

              // 执行一些代码

              back;

            default:

              // 执行一些代码

        }

    混合环境 JavaScript

        动态创建script,标签,将其加入到页面的DOM 中。

          var greeting = "Hello World";

          var el = document.createElement("script");

          el.text = "function foo(){ alert(greeting); setTimeout(foo,1000)}";

          document.body.appendChild(el);

            如果将el.src 的值设置为 URL,就可通过<script src="">

        保留字:

          保留字不能将它用作变量名: 保留字有四类:

          “关键字”  “预留关键字” “null 常量” “true/false”

你不知道的javaScript笔记(6)的更多相关文章

  1. 你不知道的JavaScript笔记----对象

    对象: 1.定义对象属性 属性描述符(也称为:数据描述符) Object.defineProperty(Object,PropertyName,{ value: 6, writable: true, ...

  2. 你不知道的javaScript笔记(7)

    异步:现在与将来 分块的程序 可以把JavaScript 程序写在单独的js 文件中,这个程序是由多个块组成的,这些块 中只有一个是现在执行,其余在捡来执行,最常见的块单位是函数. 例如: funct ...

  3. 你不知道的javaScript笔记(5)

    原生函数 常用的原生函数 String() Number() Boolean() Array() Object() Function() RegExp() Date() Error() Symbol( ...

  4. 你不知道的javaScript笔记(4)

    类型: JavaScript 有7种内置类型 空值 (null) 未定义(undefined) 布尔值(boolean) 数字(number) 字符串(string) 对象(object) 符号(sy ...

  5. 你不知道的javaScript笔记(3)

    对象 对象可以通过两种形式定义: 声明形式和构造形式 声明形式语法: var myObj = {key:value} 构造形式语法: var myObj = new Object(); myObj.k ...

  6. 你不知道的javaScript笔记(2)

    this和对象原型 this是一个很特别的关键字,被自动定义在所有函数的作用域中 // foo.count 是0,字面理解是错误的 function foo(num) { console.log(&q ...

  7. 你不知道的javaScript笔记(1)

    规避冲突 function foo(){ function bar(a){ i = 3; console.log(a + i); } for ( var i=0; i < 10; i++){ b ...

  8. 你不知道的Javascript(上卷)读书笔记之一 ---- 作用域

    你不知道的Javascript(上卷)这本书在我看来是一本还不错的书籍,这本书用比较简洁的语言来描述Js的那些"坑",在这里写一些博客记录一下笔记以便消化吸收. 1 编译原理 在此 ...

  9. 你不知道的JavaScript上卷笔记

    你不知道的JavaScript上卷笔记 前言 You don't know JavaScript是github上一个系列文章   初看到这一标题的时候,感觉怎么老外也搞标题党,用这种冲突性比较强的题目 ...

随机推荐

  1. Redis简介及持久化

    Redis是一个key-value数据库,他不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型.可用于缓存.消息队列.发布.订阅消息.商品列表和评论列表等场景.Redis提供了5种 ...

  2. 《Hadoop权威指南》读书笔记1

    <Hadoop权威指南>读书笔记 Day1 第一章 1.MapReduce适合一次写入.多次读取数据的应用,关系型数据库则更适合持续更新的数据集. 2.MapReduce是一种线性的可伸缩 ...

  3. Docker 创建镜像、修改、上传镜像

    Docker 创建镜像.修改.上传镜像 –创建镜像有很多方法,用户可以从 Docker Hub 获取已有镜像并更新,也可以利用本地文件系统创建一个. 一.创建镜像 创建镜像有很多方法,用户可以从 Do ...

  4. OLEDB 简单数据查找定位和错误处理

    在数据库查询中,我们主要使用的SQL语句,但是之前也说过,SQL语句需要经历解释执行的步骤,这样就会拖慢程序的运行速度,针对一些具体的简单查询,比如根据用户ID从用户表中查询用户具体信息,像这样的简单 ...

  5. -ms-zoom property

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. scss-变量作用域

    SCSS之所以便利,是因为它具有了编程语言的某些特性. 让原本规则刻板的CSS变的灵活起来,下面介绍一下SCSS中的作用域概念. 几乎所有编程语言都有作用域概念的涉及,原理大同小异,SCSS中的也是如 ...

  7. xshell连不上虚拟机linux的解决办法

    1.找到Linux系统的ip地址 输入命令   ifconfig 2.打开本地网络连接 将VMnet1的ip地址设置为和虚拟机ip同一网段的ip 比如虚拟机Linux系统的ip为   192.168. ...

  8. 【起航计划 033】2015 起航计划 Android APIDemo的魔鬼步伐 32 App->Service->Foreground Service Controller service使用,共享service,前台服务,onStartCommand

    Android系统也提供了一种称为“Service”的组件通常在后台运行.Activity 可以用来启动一个Service,Service启动后可以保持在后台一直运行,即使启动它的Activity退出 ...

  9. Jmeter使用CSV Data Set Config参数化数据不重复的多次循环执行(实现多用户多次抽奖功能)

    Jmeter中使用CSV Data Set Config参数化不重复数据执行N遍 要求: 今天要测试上千条数据,且每条数据要求执行多次,(模拟多用户多次抽奖) 1.用户id有175个,且没有任何排序规 ...

  10. 思维导图与Spring Batch

    最近在学画图,又在复习Spring Batch.不解释,直接上图. 第三章,用XMind画的. 第五章,用iMindMap画的.