美文网首页
第三章——基本概念

第三章——基本概念

作者: 26001a36aa12 | 来源:发表于2016-05-27 13:16 被阅读12次

    语法


    1.区分大小写

    2.标识符

    第一个字符:字母、下划线、美元符号
    其他字符:字母、下划线、美元符号、数字

    不能把关键字、保留字、true、false、null用作标识符

    3.注释
    //单行
    /*多行

    4.严格模式
    ECMAScript 5引入了严格模式

    严格模式为JavaScript定义了一种不同的解释与执行模型。ECMAScript 3中的一些不确定行为将得到处理,对某些不安全的操作也会抛出错误。

    “use strict”是一个编译指示。

    5.语句

    关键字和保留字


    官方文档

    变量


    js变量是松散类型的,也就是变量仅仅是一个保存值的占位符而已。虽然初始化变量不会标记类型。但我们不建议修改保存值类型。

    未初始化的值类型为undefined

    var定义局部变量,省略var值会变成全局变量,但不推荐使用,因为在局部作用域中定义的全局变量很难维护。

    数据类型


    共有5种简单数据类型:Undefined、Null、Boolean、Number、String;一种复杂数据类型:Object(本质上由一组无序的名值对组成)

    不支持创建自定义类型(数据类型具有动态性)

    1.typeof

    null被认为是空对象的引用,正则表达式

    函数的话会返回function

    2.undefined

    对于尚未声明的变量,只能执行一项操作,即使用typeof检测数据类型。(对未声明的变量调用delete不会导致错误,但这样做没有实际意义,且严格模式下会导致错误)

    显式地初始化变量依然是明智选择,因为在typeof返回undefined时候,我们就会知道是未声明而非未初始化。

    3.null

    表示空对象指针,只要意在保存对象的变量还没真正保存对象,就应该让其保存null值

    实际上,undefined类型派生自null类型,因此相等性测试返回true。
    alert(null == undefined); //true
    不过要注意的是,这个操作符出于比较的目的会转换其操作数。===则不会,二者区别参见此文

    4.boolean

    由于存在自动类型转换,因此确切的知道流控制语句中使用的是什么变量至关重要。

    5.number

    八进制在严格模式下无效,会导致支持JavaScript引擎抛出错误。

    鉴于JavaScript中保存数值的方式,可以保存正零(+0)和负零(-0),二者被认为相等。

    (1)浮点数值
    浮点数内存空间是整数两倍,(1)小数点后没数字(2)本身就是一个整数,如xxx.0,将自动转为整数。

    科学计数法:e 3.123e7是整数

    最高精度是17位小数,永远不要测试某个特定浮点数值。例如:0.1+0.2不等于0.3,但0.05+0.25等于0.3

    (2)数值范围
    最小数:Number.MIN_VALUE
    最大数:Number.MAX_VALUE

    超出范围最大正无穷:Infinity
    超出范围最大负无穷:-Infinity
    (Infinity不能参与计算)
    可使用isFinite判断是否有穷

    (3)NaN
    用于本来要返回一个数值但未返回数值的情况。例如:任何数值除以0都返回NaN,因此不会影响其他代码的执行。

    任何涉及NaN操作,结果都是NaN;
    NaN与任何值都不相等,包括它本身。
    可使用isNaN判断,该函数先尝试将不是数值的转换为数值,不能转换为数值的都会返回true。

    若是基于对象调用isNaN,首先调用函数的valueOf方法,然后确定该方法返回的值是否可以转换为数值,如果是NaN,则基于NaN再调用toString方法,再测试返回值。

    类型     是否有属于自己的原型valueOf方法
    Undefined
    Null
    Number 有,Number.prototype.valueOf
    String 有,String.prototype.valueOf
    Boolean 有,Boolean.prototype.valueOf
    Object -

    (4)数值转换
    三个函数把非数值转换为数值:Number()(用于任何数据类型)、parseInt()、parseFloat()(字符串->数值)

    Number:
    转换字符串:

    • 只包含数字(可以有正负号),转换为十进制(注意“011”转换为“11”),也可以转换为十六进制;
    • 空字符串->0;
    • 否则->NaN。

    parseInt:
    由于Number在转换字符串时复杂且不是很合理,因此常用parseInt

    首先,忽略空格,直到第一个字符,如果不是数字或正负号那么NaN,否则继续解析直到遇到非数字字符或到末尾。

    可以识别十进制、八进制、十六进制,但到了ECMAScript 5引擎则不具备解析八进制的能力。还可以传入基数,此时可以忽略前缀。
    如果能始终将10作为第二个基数,则是很好的习惯。

    parseFloat:
    和上面类似,只是说第一个小数点好使!且只能解析十进制数。遇到整数会返回整数。

    6.String

    (1)转义字符
    可以出现在字符串中任意位置,被当做一个字符来解析。

    (2)特点
    字符串不可变,先销毁,再创建。

    (3)转换为字符串

    toString();(null和undefined没有此方法)
    注意,在调用字符的toString方法时,可以传递一个输出数值基数的方法。

    String();(任何类型)
    有toString则调用它,没有则返回“null”或“undefined”

    7.Object

    数据和功能的集合,new加上对象名创建,或new Object()创建自定义对象。

    操作符


    ECMAScript操作符与众不同之处是,它能适应于很多值,不过在应用于对象时,相应的操作符先调用valueOf再调用toString。

    1.一元操作符

    递增递减操作符

    前置递增递减操作变量的值在语句被求值前改变,后置则之后。

    不仅适用于整数,还适用于字符串、布尔值、浮点数、对象。

    一元加减
    +:相当于Number()
    -:相当于+的取负

    2.位操作符

    ECMAScript中所有数值按照IEEE-754的64位格式存储,但位操作符不直接操作64位的值,而是先转换成32位,操作后,再转换为64位。

    有符号数:正数0开头,负数1开头(补码=正数反码+1)。

    在对特殊的NaN和Infinity位操作时,这两个值都被当做0来处理。

    如果对非数值应用位操作时,会先使用Number()转换成数值,然后应用位操作。

    按位非
    返回反码。操作数负值-1

    按位与

    按位或

    按位抑或

    左移
    0来填充。且左移不会影响操作数的符号位。

    有符号右移
    符号位的值来填充。且右移不会影响操作数的符号位。

    无符号右移
    0来填充。会影响符号位。

    3.布尔操作符

    逻辑非
    可应用于任何值

    逻辑与
    可应用于任何值,短路操作。

    对象就相当于true了,还有null、NaN、undefined都返回原有的这几个类型。当然也会返回对象。

    不能在逻辑与中使用未定义的值。

    逻辑或
    可应用于任何值,短路操作。

    对象就相当于true了,只有两者都为null、NaN、undefined才会返回原有的这几个类型。当然也会返回对象。

    本书中会经常采用这种赋值语句模式,来避免为变量赋null或undefined。

    4.乘性操作符

    乘法、除法、求模。

    使用Number()自动类型转换。

    乘法
    Infinity*0=NaN

    除法
    Infinity/Infinity=NaN
    0/0=NaN
    (非0有限数)/0=(+/-)Infinity

    求模
    Infinity%Infinity=NaN
    Infinity%(非0有限数)=NaN
    (非0有限数)%0=NaN

    5.加性操作符

    加法
    对象、数值、布尔值会调用toString方法

    减法
    如果有操作数是字符串、布尔值、null、undefined,则先调用Number()转换为数值之后,再操作,对象操作与之前一样。

    6.关系运算符

    一般都是进行数值转换再比较,但字符串不同,如果有两个字符串**比较的是对应字符编码的值。

    任何数与NaN比较,结果都是false。

    7.相等操作符

    相等和不相等——先转换再比较
    全等和不全等——仅比较不转换

    相等和不相等
    一般都是进行数值转换再比较。但null和undefined不能转。

    null=undefined返回true

    有一个NaN则==返回false

    如果两个操作数都是对象,则比较他们是不是同一个对象,如果两个操作数都指向同一个对象,则返回true

    全等和不全等
    null===undefined返回false哦!

    由于相等和不相等操作符存在类型转换问题,而为了保持代码中数据类型的完整性,我们推荐使用全等与不全等操作符。

    8.条件操作符

    ?:

    9.赋值操作符

    复合赋值

    10.逗号操作符

    在用于赋值语句时,逗号操作符返回最后一项:
    var num=(5,4,3,6,1) //num值是1

    语句


    1.if

    2.do-while

    3.while

    4.for

    由于ECMAScript中不存在块级作用域,因此,在循环内部定义的变量也可以在外部访问到。但要注意自己写的时候,要以表义清晰为标准。

    5.for-in

    用来枚举对象的属性,由于ECMAScript中对象属性没有顺序,因此,访问次序因浏览器而异。

    如果要迭代的对象为null或undefined,曾经会抛出错误,但现在只是不执行循环体。所以,最好先检测一下对象。

    6.label

    添加标签,可以在将来由break或continue引用,一般都要与for等循环语句配合使用。并且最好使用描述性的标签。

    7.break和continue

    8.with

    将代码的作用域设置到一个特定的对象当中。

    定义with语句的作用主要是:简化多次编写同一个对象的工作。

    在with语句代码块内部,每个变量首先被认为是一个局部变量,如果在局部环境中找不到该变量的定义,就会查询with对象中是否有同名属性。

    由于大量使用with语句会导致性能下降,也会给代码调试造成困难,因此在开发大型应用程序时,不建议使用with语句。

    9.switch

    首相,可以使用任何数据类型(其他语言有类型限制);其次,每个case的值不一定是常量,可以是变量,甚至是表达式。

    switch语句在比较的时候使用的是“全等操作符”

    函数


    function functionName(arg0,arg1,...){}
    

    同样,js也是遇到return语句立刻退出。

    若return不带返回值,函数将返回undefined。这种是用在需要停止函数又不需要返回值时。

    要么让函数始终都返回值,要么让函数永远不返回值,否则,时而返回时而不返回,会给调试带来很大不便。

    理解参数
    不介意传进来几个参数,因为接收的参数始终以arguments数组形式存储,可以使用arguments[0]等形式访问参数。还可以使用arguments.length。且arguments对象中的值会自动反映到对应的命名参数,但他们的内存空间是独立的,只是值同步。

    • “命名参数只为提供便利,但不是必需的。”

    没有传递值的命名参数将自动被赋予undefined。

    严格模式对如何使用arguments对象做了限制。自行查阅资料。

    • 注意:

    ECMAScript中所有参数传递的都是值,不可能通过引用传递参数。

    没有重载
    如果定义了两个名字相同的函数,则该名字只属于后定义的函数,因为覆盖了。

    相关文章

      网友评论

          本文标题:第三章——基本概念

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