美文网首页
无标题文章

无标题文章

作者: 许晨星 | 来源:发表于2018-03-08 15:19 被阅读0次

    # JavaScript权威指南2/3章

    ## 第二章:词法结构

    ### 2.1字符集

    * JS使用Unicode字符集编写,这是ASCII和Latin-1的超集

    * JS区分大小写

        * 但是html不区分大小写

    * JS忽略空格,换行符和格式控制符

    ### 2.3直接量

    * 注意一下直接两可以是正则表达式直接量,比如/javascript/gi

    ### 2.4 标识符和保留字

    * 这个特别注意下严格模式下的保留字

        * implements

        * let

        * private

        * public

        * yield

        * interface

        * package

        * protected

        * static

    ### 2.5 可选分号

    * js会自动在【换行处 且 缺少分好就无法正确解析代码】的时候填补分号

    ## 第三章:类型、值和变量

    ### 3.1数字

    * js不区分整数值和浮点数,所有的数字都用浮点数表示,采用IEEE 754标准的64位浮点格式表示数字

    * 整型

        * 进制

            * 16进制:0x

            * 8进制:0

                * ES标准不支持8进制,所以尽量别用

                    * 严格模式下8进制是禁止的

    * 浮点型

        * 记住指数记数法就好,e/E都可以,+/-也可以用,如 6.02e-3

    * 常见数学计算函数都封装在Math里

        * 幂运算

            * Math.pow(a,b)

                * 立方根

                    * Math.pow(3,1/3)

        * 四舍五入

            * Math.round()

        * 向上取整

            * Math.ceil()

        * 向下取整

            * Math.floor()

        * 绝对值

            * Math.abs()

        * 返回最大值/最小值

            * Math.max() / Math.min

        * 生成一个0《x<1.0的伪随机数

            * Math.random()

        * 圆周率

            * Math.PI

        * 自然对数的底数

            * Math.E

        * 平方根

            * Math.sqrt

        * 三角函数

            * Math.sin()/Math.cos

        * 自然对数

            * Math.log()

        * e的n次幂

            * Math.exp()

    * JavaScrip的算术运算在溢出/下溢/被0整除 都不会报错

        * 溢出

            * 结果为一个±infinity值,表示无穷大/小

        * 下溢

            * 无穷小属于溢出,不是属于下溢

            * 指的是运算结果无限接近0且比js能表示的最小值还小

            * 结果:返回0

        * 被0整除

            * 返回±infinity

            * 但是0/0会返回一个非数字值NaN

        * JS中的非数字值与【任何值】都不等,包括自身

            * 无法通过x==NaN 来判断x是否是NaN

            * 通过.isNaN()函数来判断

                * 类似函数还有.isFinite()

            * 应该通过x!=x

        * -0 = +0

    * 3.1.5 日期与时间

        * Date()构造函数可以创建表示日期和时间的对象

        * undefined

    ### 3.2文本

    * 从ES5开始,字符串直接量可以拆分成数行,每行以‘\'结束

    常见转义字符

        * \t 水平制表符

            * \v垂直制表符

        * \n 换行符

        * \b 退格符

        * \r 回车符

    * 字符串api

        * undefined

    * 模式匹配

        * 这里抽到第十章讲吧

    ### 3.3布尔值

    * 任意Js的值都会转换为布尔值

        * 转为true

            * 一般有值就会使真值

        * 转为false

            * undefined

            * null

            * 0

            * -0

            * NaN

            * "" 空字符串

    * 注意&&,||,! 这种逻辑运算符都有C++一样的特性,就是判断了第一个,如果已经满足逻辑条件,就不会执行第二个语句

    ### 3.4 Null 和 undefined

    * null

        * null是一个特殊的对象,含义是“非对象”,表示数字,字符串,对象是“无值”

    * undefined

        * 指的是变量没有初始化,不存在,没有这个属性

    * 当使用==的时候,两者相等;使用===的时候,不相等

    ### 3.5 全局对象

    * 全局属性

        * ,比如undefined,infinity和NaN

    * 全局函数

        * 比如isNaN(),parseInt(),eval()

    * 构造函数

        * 比如Date(),RegExp()

    * 全局对象

        * 比如Math,JSON

    * 在代码的最顶级,不在任何函数内的js代码中可以用var global = this 得到全局变量

        * 而在客户端JS,在浏览器窗口中的所有JS代码中,window对象充当了全局对象

        * window对象有一个属性window引用自身,所以可以代替this来引用全局对象

    ### 3.6 包装对象

    * 指:存取 字符串、数字、布尔值的属性时 创建的临时对象

        * 因为字符串,数字,布尔值都是只读的,并且不能定义新属性,所以它们是有别于对象的

        * 然后包装对象被创建后,被存取之后就会销毁

            * undefined

        * ==会将原始值和包装对象认为相等,===不相等

    ### 3.7 不可变的原始值和可变的对象引用

    * 不可更改的JS原始值

        * undefined,null,布尔值,数字,字符串

            * 特别注意,字符串也是不可以更改的,字符串中所有的方法看上去返回了一个修改后的字符串,实际上返回的是一个新的字符串值

        * 但是对象(包括数组与函数)可以

    * 可变的对象引用

        * 我们通常将对象成为“引用类型” reference type ,与基本类型区分开

        * 对象的比较≠值的比较,即使两个对象包含同样的属性同样的值,在===的情况下是不会相等的

        * 对象的比较 都是 引用的比较,只有引用同一个基类对象的时候,它们才相等

        * 如何copy/比较 一个对象副本

            * 显式赋值/比较

    ### 3.8 类型转换

    * 3.8.1 转换和相等性

        * 注意 能转化并不代表==就相等

    * 3.8.2 显式类型转换

        * Boolen()

        * Number()

        * String()

        * Object()

        * 除了null和undefined之外,任何值都有toString()方法

            * Number类的对应方法,接受一个进制转换参数(默认为10)

            * 字符串转换为数字

                * Number()构造函数,将传入的字符串转换为一个整数或者浮点数,只能基于十进制数,不能出现非法尾随字符

                * parseInt()  只解析整数

                * parseFloat() 解析整数和浮点数,可以接收第二个可选参数,制定数字转换的基数(比如八进制啊之类的

    * 3.8.3 对象转换为原始值

        * 对象→布尔值

            * 所有对象都转换为true,包括数组,函数

        * 对象→字符串

            * 如果有,优先调用对象的toString()方法,如果toString()返回了一个JS原始值,那么就将这个值转为字符串

            * 如果没有toString()方法,或者toString()不返回原始值

                * 调用valueOf()方法,如果返回了原始值,转换为字符串

            * 如果前面2个方法都挂了,就会抛出异常

        * 对象→数字

            * 先把对象转换为字符串,再转换为数字

        * 所以含有一个元素的数组转换成字符串的结果 =  这个元素转换为字符串的结果

        * Date类型对象特殊

        * 而在“=”,“+”,“!=”“<" 这种运算发,对象转换到原始值将……?

    ### 3.9 变量声明

    * 声明变量后如果没有指定初始值,那么初始值将是undefined

    ### 3.10 变量作用域

    * 声明提前(hoisting)

        * JS的函数作用域是指【函数内生命的所有变量在函数体内始终是可见的】

        * 变量在代码的声明之前就已经可用,这叫声明提前

        * 可以理解为JS函数里生命的所有变量(但不涉及赋值)都被提前到了函数体的顶部

        * 这个骚操作是在预编译的时候进行的

    * 作为属性的变量

        * JS强制规定,全局变量是全局对象的属性

        * JS可以允许使用this来获得全局对象,但是没有方法引用全局变量中存放的对象

    * 作用域链

        * 意思就是当JS需要查找变量值x的时候(成为变量解析 variable resolution)

        * 它会从作用域链的第一个对象可以查找,如果有x,就直接用

        * 如果没有,查找链上的下一个对象,以此类推,知道查到最顶层的那个对象

        * 59页的那段话我是没有看懂的

    *XMind: ZEN - Trial Version*

    相关文章

      网友评论

          本文标题:无标题文章

          本文链接:https://www.haomeiwen.com/subject/bodyfftx.html