1、数据类型
(1)Number,JavaScript不区分整数和浮点数,统一用Number表示
NaN; // NaN表示Not a Number,当无法计算结果时用NaN表示
Infinity; // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity
(2)布尔值:true、false,&&、||、!
(3)比较运算符
双等号:会自动转换数据类型再比较
三等号:不会自动转换数据类型,如果数据类型不一致,返回false
,如果一致,再比较
NaN
这个特殊的Number与所有其他值都不相等,包括它自己。唯一能判断NaN
的方法是通过isNaN()
函数
比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值
(4)null
表示一个空的值,而undefined
表示值未定义。undefined
仅仅在判断函数参数是否传递的情况下有用
(5)数组用“[]”
表示,元素之间用“,”
分隔;也可以通过Array()
函数创建。强烈建议前者
(6)对象:JavaScript的对象是一组由键-值组成的无序集合
2、变量
(1)变量名是大小写英文、数字、$
和_
的组合,且不能用数字开头,也不能是JavaScript的关键字
(2)申明一个变量用var
语句
(3)可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量
3、strict模式
JavaScript在设计之初,为了方便初学者学习,并不强制要求用var
申明变量。这个设计错误带来了严重的后果:如果一个变量没有通过var
申明就被使用,那么该变量就自动被申明为全局变量
为了修补JavaScript这一严重设计缺陷,ECMA在后续规范中推出了strict模式,在strict模式下运行的JavaScript代码,强制通过var
申明变量
启用strict模式的方法是在JavaScript代码的第一行写上:'use strict';(这是一个字符串,不支持strict模式的浏览器会把它当做一个字符串语句执行)
4、多行字符串
由于多行字符串用\n
写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用反引号 ` ... ` 表示
5、模板字符串
如果有很多变量需要连接,用+
号就比较麻烦。ES6新增了一种模板字符串,表示方法和上面的多行字符串一样,但是它会自动替换字符串中的变量(`你好, ${name}, 你今年${age}岁了!`)
6、操作字符串
字符串是不可变的,如果对字符串的某个索引赋值,不会有任何错误,但是,也没有任何效果
7、数组
(1)要取得Array
的长度,直接访问length
属性
(2)直接给Array
的length
赋一个新的值会导致Array
大小的变化
(3)如果通过索引赋值时,索引超过了范围,同样会引起Array
大小的变化
(4)不给slice()
传递任何参数,它就会从头到尾截取所有元素
(5)push()
向Array
的末尾添加若干元素,pop()
则把Array
的最后一个元素删除掉
(6)如果要往Array
的头部添加若干元素,使用unshift()
方法,shift()
方法则把Array
的第一个元素删掉
(7)reverse()
把整个Array
的元素给掉个个儿,也就是反转
(8)splice()
方法是修改Array
的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素
(9)concat()
方法把当前的Array
和另一个Array
连接起来,并返回一个新的Array;concat()
方法可以接收任意个元素和Array
,并且自动把Array
拆开,然后全部添加到新的Array
里
(10)join()
方法把当前Array
的每个元素都用指定的字符串连接起来,然后返回连接后的字符串
8、对象
(1)由于JavaScript的对象是动态类型,你可以自由地给一个对象添加或删除属性:delete xiaoming.age
(2)检测xiaoming
是否拥有某一属性,可以用in
操作符:'name' in xiaoming。不过要小心,如果in
判断一个属性存在,这个属性不一定是xiaoming
的,它可能是xiaoming
继承得到的
(3)要判断一个属性是否是xiaoming
自身拥有的,而不是继承得到的,可以用hasOwnProperty()
方法:xiaoming.hasOwnProperty('name')
9、条件判断
(1)JavaScript把null
、undefined
、0
、NaN
和空字符串''
视为false
,其他值一概视为true
10、Map
(1)
用JavaScript写一个Map如下:var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
11、Set
(1)要创建一个Set
,需要提供一个Array
作为输入,或者直接创建一个空Set
(2)
通过add(key)
方法可以添加元素到Set
中
(3)通过delete(key)
方法可以删除元素
12、iterable
(1)Array
、Map
和Set
都属于iterable
类型
(2)具有iterable
类型的集合可以通过新的for ... of
循环来遍历(for ... in会有另外一些问题)
(3)更好的方式是直接使用iterable
内置的forEach
方法,它接收一个函数,每次迭代就自动回调该函数(Array的回调参数是元素、下标、Array本身,Set的回调参数是元素、元素、Set本身,Map的回调参数是value、key、Map本身)