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转换 )
| Boolean | true | false |
|---|---|---|
| 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()
可用于将任意类型装换为数值类型参数类型 参数值 返回值 Boolean false 0 Boolean true 1 null null 0 undefined undefined NaN number 数值 原数值 String 只包含数字(包括正负号、浮点格式、十六进制格式) 对应的十进制数字 String 包含上述字符以外的字符 NaN String 空字符串 '' 0 Object 任意对象 先调用对象的valueOf方法,再根据以上原则转换返回的值。如果转换结 果为NaN,则调用对象的toString()方法,再根据以上原则转换返回的值。 Number()在转换字符串的时候规则复杂不合理,所以当转换字符串的时候更多用parseInt()和parseFloat()
-
数值转换 - parseInt()
仅用于将字符串转换为数值类型。它会忽略字符前面的空格,直到找到第一个非空字符。如果第一个字符不是数字或者负号,则返回NaN。如果第一个字符是数字字符,则会继续解析第二个字符,直到遇到一个非数字字符,后面的字符都会被忽略。 parseInt 接受两个参数,第二参数可以不传,代表转换时的基数(多少进制),默认为 10。 -
数值转换 - parseFloat()
String
es中字符串一旦创建,不可改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。
- 转换为字符串 - toString()
- number,boolean,object,string 都有 toString() 方法
- null 和 undefined 没有 toString() 方法
- 数值型在使用 toString()方法的时候,可以传参,表示要转换的进制
- 转换为字符串 - String()
- 如果值有 toString() 方法,直接调用返回相应结果
- null 返回 'null'
- undefined 返回 'undefined'
- 转换为字符串 - +操作符
Object
- 使用 new 关键字创建一个对象: o = new Object()
- Object 中的属性和方法
- constructor 构造函数,用于创建当前对象的函数
- hasOwnProperty(propertyName) 用于检查当前实例对象(不包括原型)中是否有指定属性
- isPrototypeOf(object) 用于判断传入的对象的原型
- propertyIsEnumerable(propertyName) 用于检查指定属性是否可枚举
- toLocalString() 返回对象和执行环境的地区对应的字符串表示
- toString() 返回对象的字符串表示
- valueOf() 返回对象的字符串、数值、布尔值表示,一般和 toString() 返回相同
- Object 类型是所有她实例的基础,也就是说 Object 类型所具有的任何属性和方法都同样存在于更具体的对象中。
操作符
- 一元操作符: 递增(++) / 递减(--) 操作符
- 前置递增的变量值是在语句被求值前改变的。后置递增的操作是在包含它们的语句被执行后才执行的。
- 当执行操作的不是 number 类型时,要先转换成 number 类型再计算
- 位 操作符
- 布尔操作符
- 逻辑非(!): 模拟 Boolean() 函数的行为再取反
- 逻辑与(&&):短路操作,如果第一个操作值经过 Boolean() 返回 false,就不会再进行对第二个操作数的求值。
- 逻辑或(||):短路操作,如果第一个操作值经过 Boolean() 返回 true,就不会再进行对第二个操作数的求值。
- 加(+) / 减(-) 操作符
- 当执行操作的不是 number 类型时,要先转换成 number 类型再计算,规则同 Number()
- 乘(*) / 除(/) 操作符
- 求模(余数) %
- 关系操作符 (> , <, >=, <=)
- 相等操作符
- 相等(==)和不相等(!=): 先转换再比较
- 全等(===)和不全等(!==): 仅比较而不转换
- 条件操作符(三目运算符)
- 赋值运算符
- 逗号运算符
语句
if | do-while | while | for | for-in | label | break | continue | with | switch
label | break | continue
- break: 立即退出整个循环,接着执行循环后面的语句
- continue: 立即退出本次循环,接着从循环的顶部继续执行
- break 和 continue 可以和 label 联合使用,常用于嵌套循环,label 可以指定跳出的是哪一层循环。
函数
-
es函数不会在意参数个数和类型,因为在内部接收的都是一个数组,而不关心数组中的值。
-
每个函数都有一个 arguments 属性,是函数内部专门用来存储实参的类数组对象。