变量
- 定义:用于存放数据的容器
- 声明变量:
var varname;- 声明变量未初始化和未声明变量得到的返回值都是
undefined
- 声明变量未初始化和未声明变量得到的返回值都是
- 初始化变量和修改变量
var varname='Chris'varname='Bob'
- 通过var声明的变量都将成为定义该变量的作用于中的“局部变量”
- 若在function函数中通过var声明变量,那么这个变量就是局部变量,在function结束的时候被销毁
- 若在function函数外部通过var声明变量,那么这个变量就是全局变量,在页面关闭后被销毁
- 略去var声明的变量将提升为全局变量
- 动态类型,不需要指定变量将包含什么数据类型
数据类型
-
判断数据类型的方法:
typeof -
Undefined- 只有一个值
undefined,表示使用var声明的但未初始化的变量
- 只有一个值
-
Null- 只有一个值
null undefined派生于null,所以它们的相等性测试要返回truetypeof操作符返回object- 用途:声明一个变量用于保存对象,若这个变量还未真正保存对象时,则需要显式地将变量设置为
null
- 只有一个值
-
Boolean- 两个值:
true和false - 转换规则:
数据类型 转换为true的值 转换为false的值 String 非空字符串 空字符串"" Number 任何非零数字值 0和NaN Object 任何对象 空对象null Undefined 不适用 undefined - 两个值:
-
Number- 十进制表示
- 八进制表示:
var octalNum=070 - 十六进制表示:
var hexNum=0x12 - 浮点数
- 表示方法:
var floatNum=1.1 - JS会智能地将浮点数转换为整数
- 科学计数法:
var floatNum=3.14e7 - JS中的浮点数采用IEEE754标准,会存在精度问题,因此永远不要测试某个特定浮点数的值
- 表示方法:
- 数据范围:
Number.MIN_VALUE~Number.MAX_VALUE - NaN(Not a Number)
- 表示一个本来要返回数值的操作数未返回数值的情况
- 任何涉及NaN的操作都会返回NaN
- NaN和任何值都不相等
- 判断变量是否是数值:
isNaN()
- 数值转换
- Number()作用于任何数据类型,parseInt()和parseFloat()专门用于把字符串转换成数值
true-->1,false-->0null-->0undefined-->NaNString只包含数字:十进制,浮点,十六进制都会转换成对应格式的数字- ""-->0
String中包含上述格式以外的字符-->NaN- 对象,调用对象valueOf()方法,如果转换结果是NaN,则调用对象的toString()方法。依次按照上述规则进行转换。
-
String- 可以使用单引号或双引号,但是不能混用。
- 字符串是不可变的
- 转换规则:
- 调用toString()
- null-->"null"
- undefined-->"undefined"
-
Object- 组成,由对象成员构成
var person={ name:'Chris', age:24 }- name
- value
- 由冒号分割
- 表示方法
- 点表示法
person.name- 括号表示法,可以动态的设置成员的名字
person['name'] - this的含义:当前代码运行时的对象
- 组成,由对象成员构成
-
数组
- 创建数组
var shopping=['bread','milk','cheese','noodle'] - Array构造函数
- 可以传递单个数字类型的参数,表示数组的长度
- 可以传递数组中应该保存的项
- 访问和修改数组,使用方括号的方法(数组长度动态调整)
- 检测数组
- Array.isArray()
- 数组和字符串的转换
- split()
- join()
- 添加和删除数组项
- push(),从数组的尾部添加,返回数组的新长度
- pop(),从数组的头部删除,返回被删除的元素
- unshift(),从数组的头部添加,返回数组的新长度
- shift(),从数组的头部删除,返回被删除的元素
- 排序
- Array.sort([compareFunction])
- 默认排序规则元素转换为字符串后的各个字符的Unicode位点进行排序
- 自定义排序规则
numbers.sort(function(a,b){})numbers.sort((a,b)=>)
- compareFunction(a,b),如果返回值小于0,a排在b的前面,反之,b排在a的前面
- 迭代
以下每个方法都接受两个参数:要在每一个项上运行的函数和(可选的)运行该函数的作用域
- every(),查询数组中的项是否满足某种条件,全部满足才返回true
- filter(),查询数组中的项是否满足某种条件,将满足条件的项筛选出来,并构成新数组
- forEach(),对数组中每一项运行函数,无返回值
- map(),对数组中每一项运行函数,返回每一项运行结果构成的新数组
- some(),查询数组中的项是否满足某种条件,至少有一个满足就可以返回true
- 函数的形态:function(item,index,array)。参数分别是数组项,数组项的下标,数组本身
- 归并
- reduce()
- reduceRight()
- 接受参数:每一项调用的函数和(可选度)作为归并的初始值
- 调用函数的形态:function(prev,cur,index,array)。分别是前一个值,当前值,数组项下标,数组本身。函数的返回值会自动作为下一次迭代过程中函数的参数prev
- 使用reduce()和reduceRight()取决于从哪一个方向开始归并数组
- 创建数组