复习笔记 JavaScript语言精粹 第2章 语法

200 阅读5分钟

地铁图

  • 从左边界开始,沿着轨道向右
  • 沿途,圆框中的是字面量,方块中的是规则或描述
  • 能够沿着轨道走通的是合法的
  • 走不通的不合法
  • 末端只有一条竖线的铁路图,表示允许在任意一对符号中插入空白.而两条竖线的则不允许

参考:blog.csdn.net/u013961139/…

空白

格式化的字符或注释叫空白

  • space,tab,line end,//,/**/
  • 没用的注释比没注释更糟糕
  • 尽量不要使用/**/注释

标识符

  • 字母开头,由数字,字母和_组成
  • 不能是保留字

数字

  • 只有一个64位的浮点数
  • 没有整型,所以1和1.0是一样的
  • 数字字面量中包含指数部分,则其值等于e之前的数字*10的e之后的数字的次方,如1e2 是100,2e3是2000
  • 负数由前置运算符-构成
  • NaN是数值,表示不能产生正常结果的运算结果
  • Infinity表示所有大于1.79769313486231570e+308的值
  • 数字拥有方法,比如tofixed等
  • Math对象包含一套操作数字的方法

字符串

  • 由单引号或双引号构成,包含0或多个字符
  • \是转义字符
  • 所有字符都是16位的
  • \u用来指定数字字符的编码..
  • 字符串有一个length属性
    • 字符串是不可变的.可以通过+来连接其他字符串,var a = "1";var b = a;b+="2";a为1,b为12
    • 字符串拥有方法,比如toUpperCase()

语句

  • 每个<script>标签提供一个编译单元,每个编译单元包含一组可执行的语句
  • 当var语句被用在函数内部,是定义的变量是该函数的私有变量,
  • switch,while,for,do语句允许有一个label前置标签,配合break使用.有类似于c#中的goto语句.尽量少用
var num=0;
outermost:
for(var i=0;i<10;i++){
    for(var j=0;j<10;j++){
        if(i==5&&j==5){
            break outermost;
        }
        num++;
    }
}   
  • 正常是从上到下执行
    • 通过条件语句if,switch,循环语句while,for,do,强制中转语句break,return,throw和函数调用来改变执行顺序
  • 代码块包含在花括号里面.因为js里面的代码块不会创建新的作用域,所以变量应该被字义在函数的头部
    • 像C#的话,i是无法被访问到的,js却可以访问.
    • 如果想要实现局部变量,只能通过函数来实现.函数还是有作用域的.只是花括号没有作用域而已
for(var i = 0;i<10;i++){}
console.log(i);   
  • if判断时flase,null,0,'',nudefined,NaN被认定为假,其余余部是真
  • switch多分支,记得用break和default
  • while
  • for,初始化从句+条件从句+增量从句...有一个好玩的例子for(var a=1024,b=568795,b>1,b=b/a;)
  • for in,注意避免循环出从原型链中继承来的属性
  • do和while一样
  • try catch throw
    • 如果throw在try中,那么会进入这个try的catch
    • throw的表达式一般是一个对象字面量,包含name属性和message属性
    try {
        try {
            console.log(a)
        } catch (e) {
            throw {
                name: "sss",
                message: "xxx"
            }
        }
    } catch (e) {
        console.log(e)
    }
  • return如果不带返回值,则返回值是undefined
  • break退出一个循环或switch,可以配合标签使用
  • 一个表达式可以给一个或多个变量或成员赋值,如a=b=c=5+6;
  • 一个表达式可以给一个或多个变量或成员调用方法
  • 一个表达式可以给一个或多个变量或成员从对象中删除一个属性 这两条没有看懂
  • +=作加法运算或连接字符串

表达式

  • 最简单的表达式是字面量值(比如"",3),变量(如a),内置的值(false,NaN)
  • 以new开头的调用表达式
  • 以delete开头的属性提取表达式
  • 包在圆括号中的表达式
  • 以一个前置运算符作为前导的表达式,或..........
  • 一个中置运算符与另一个表达式 不懂
  • 一个函数调用 trim()
  • 一个属性提取表达式 "xxx".length
  • 三元运算符?后面跟着另一个表达式,然后接一个:,然后再接第3个表达式 ""===" "?1:2

这个中置表达式应该是翻译上的问题,可能翻译成其他的会更多吧.其实就是指的for in中的in,switch case里面的case这一类运算符

运算符的优先级.....

typeof产生的值有

  • number

  • string

  • boolean

  • undefined

  • function

  • object

    • 如果运算符是数组或Null,结果也是object
  • &&第一个为假,则取第1个

  • ||第一个为真,则取第1个

  • 函数调用运算符()...这个明白了就好办了

  • 属性提取运算符[],....这个明白也了就清晰多了

字面量

  • 字面量是一种按照指定规则创建新....新啥子呢的表示法
  • 如/xxx/是正则
  • 'xxx'是字符串
  • 对象字面量{var:'xxx'}属性名可以是标识符,但是标识符无法以.进行提取
  • 数组字面量[xxx]

函数

  • 函数字面量,可以有名字,参数,主体
  • function
  • 要注意形参和实参的区别

复习感

真觉得当时的笔记做的好混乱,完全是照抄.没有清晰的结构,只是不停的记录一个又一个的知识点,不过都有一个阶段吧,如果才开始就知道先整体再细节的学习方法,也不会有今天的冉娃娃了.

不过关于运算符这个,记忆还是特别新的.以前只知道()是执行方法.是获取属性值,经他这么一讲,哦,原来这两个是运算符啊.

再就是感慨作者真是TMD牛逼.所有的基础语法,居然只花了10多页就讲完了,后来看犀牛书哎呀我去,简直折磨人.只可惜那个铁道图始终看着有点头大,要不整个基础语法部分,只需要保留这几张图就ok了.