笔记-js高级程序设计-3.es语法

184 阅读5分钟

var

  • var 定义在全局的变量为全局变量
  • 在函数中使用var定义一个变量为局部变量,会在函数执行完之后被销毁
  • 不用 var 在函数内部声明的变量是全局变量,可以在函数外部的任意地方被访问到。

数据类型

Undefined / Null / Boolean / Number / String / Object

  • typeof操作符
   typeof 未定义    =》 'undefined'
   typeof 布尔值    =》 'boolean'
   typeof 字符串    =》 'string'
   typeof 数值      =》 'number'
   typeof 对象/null =》 'object'
   typeof 函数      =》 'function'

Undefined

  • 使用 var 声明但未初始化的变量值
  • 所以使用 typeof 检测声明但未初始化的变量时会返回 undefined,但奇怪的是对于未声明的变量,typeof 也会返回 undefined

Null

undefined 的值是派生自 null 的,所以:

 null == undefined  //true

Boolean: true / fale

es中所有的值都有和这两个 Boolean 值相等的值,可调用 Boolean()转型函数( if语句会制动执行相应的Boolean转换

Booleantruefalse
String非空字符串空字符串('')
Number非0数值0和NaN
Object任何对象null
Undefined/undefined

Number

整数: 一般为十进制,也可以是八进制(以 0 开头),十六进制(以 0x 开头)

浮点数:包含一个小数点,且小数点后必须至少有以为数字。

  • 由于保存浮点数需要的内存是整数的两倍,因此如果小数点后没有数字(1.)或者本身表示的就是一个整数(10.0),则会直接被转换成整数。
  • 对于极大或极小的数值,可以用 e 表示法的浮点数值表示
  • 浮点数进行计算的时候会产生误差,0.1+0.2不等于0.3

NaN:表示一个要返回数值的操作数未返回数值的情况(除数为0)

  • 任何涉及NaN的操作都会返回NaN
  • NaN和任何值都不相等,包括NaN本身
 NaN == NaN  //false
  • isNaN() 接收一个参数,判断该参数是否能转换成数值

  • 数值转换 - Number()
    可用于将任意类型装换为数值类型

    参数类型参数值返回值
    Booleanfalse0
    Booleantrue1
    nullnull0
    undefinedundefinedNaN
    number数值原数值
    String只包含数字(包括正负号、浮点格式、十六进制格式)对应的十进制数字
    String包含上述字符以外的字符NaN
    String空字符串 ''0
    Object任意对象先调用对象的valueOf方法,再根据以上原则转换返回的值。如果转换结 果为NaN,则调用对象的toString()方法,再根据以上原则转换返回的值。

    Number()在转换字符串的时候规则复杂不合理,所以当转换字符串的时候更多用parseInt()和parseFloat()

  • 数值转换 - parseInt()
    仅用于将字符串转换为数值类型。它会忽略字符前面的空格,直到找到第一个非空字符。如果第一个字符不是数字或者负号,则返回NaN。如果第一个字符是数字字符,则会继续解析第二个字符,直到遇到一个非数字字符,后面的字符都会被忽略。 parseInt 接受两个参数,第二参数可以不传,代表转换时的基数(多少进制),默认为 10。

  • 数值转换 - parseFloat()

String

es中字符串一旦创建,不可改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。

  • 转换为字符串 - toString()
    1. number,boolean,object,string 都有 toString() 方法
    2. null 和 undefined 没有 toString() 方法
    3. 数值型在使用 toString()方法的时候,可以传参,表示要转换的进制
  • 转换为字符串 - String()
    1. 如果值有 toString() 方法,直接调用返回相应结果
    2. null 返回 'null'
    3. undefined 返回 'undefined'
  • 转换为字符串 - +操作符

Object

  1. 使用 new 关键字创建一个对象: o = new Object()
  2. Object 中的属性和方法
    • constructor 构造函数,用于创建当前对象的函数
    • hasOwnProperty(propertyName) 用于检查当前实例对象(不包括原型)中是否有指定属性
    • isPrototypeOf(object) 用于判断传入的对象的原型
    • propertyIsEnumerable(propertyName) 用于检查指定属性是否可枚举
    • toLocalString() 返回对象和执行环境的地区对应的字符串表示
    • toString() 返回对象的字符串表示
    • valueOf() 返回对象的字符串、数值、布尔值表示,一般和 toString() 返回相同
  3. Object 类型是所有她实例的基础,也就是说 Object 类型所具有的任何属性和方法都同样存在于更具体的对象中。

操作符

  1. 一元操作符: 递增(++) / 递减(--) 操作符
    • 前置递增的变量值是在语句被求值前改变的。后置递增的操作是在包含它们的语句被执行后才执行的。
    • 当执行操作的不是 number 类型时,要先转换成 number 类型再计算
  2. 位 操作符
  3. 布尔操作符
    • 逻辑非(!): 模拟 Boolean() 函数的行为再取反
    • 逻辑与(&&):短路操作,如果第一个操作值经过 Boolean() 返回 false,就不会再进行对第二个操作数的求值。
    • 逻辑或(||):短路操作,如果第一个操作值经过 Boolean() 返回 true,就不会再进行对第二个操作数的求值。
  4. 加(+) / 减(-) 操作符
    • 当执行操作的不是 number 类型时,要先转换成 number 类型再计算,规则同 Number()
  5. 乘(*) / 除(/) 操作符
  6. 求模(余数) %
  7. 关系操作符 (> , <, >=, <=)
  8. 相等操作符
    • 相等(==)和不相等(!=): 先转换再比较
    • 全等(===)和不全等(!==): 仅比较而不转换
  9. 条件操作符(三目运算符)
  10. 赋值运算符
  11. 逗号运算符

语句

if | do-while | while | for | for-in | label | break | continue | with | switch

label | break | continue

  1. break: 立即退出整个循环,接着执行循环后面的语句
  2. continue: 立即退出本次循环,接着从循环的顶部继续执行
  3. break 和 continue 可以和 label 联合使用,常用于嵌套循环,label 可以指定跳出的是哪一层循环。

函数

  1. es函数不会在意参数个数和类型,因为在内部接收的都是一个数组,而不关心数组中的值。

  2. 每个函数都有一个 arguments 属性,是函数内部专门用来存储实参的类数组对象。