1. js中并不是所有值都是对象
- 基本数据类型不是对象,没有方法和属性
方法:是某个特定对象才能调用的函数
属性:是隶属于某个特定对象的变量
对象:是一种字包含的数据类型
2. JavaScript与ECMAScript的关系
- ECMAScript和JavaScript的关系是,前者是后者的规格,后者是前者的一种实现。在日常场合,这两个词是可以互换的。
2.1基本语法
- 变量提升:就是所有的变量的声明语句,都会被提升到代码的头部
- for循环和while循环相同
- 三元运算符
(条件) ? 表达式1 : 表达式2
可视为if...else的简写 - do...while循环不管条件是否为true至少执行一次
- continue语句用于立即终止本轮循环,返回循环结构的头部,开始下一轮循环
- break用于直接跳出循环或代码块
2.2数据类型
- typeof null返回object
- if语句中
undefined
和null
都会转为false - null是一个表示“空”的对象,转为数值时为0;
- undefined是一个表示”此处无定义”的原始值,转为数值时为NaN。
- 转换规则是除了下面六个值被转为false,其他值都视为true。
undefined
null
false
0
NaN
"或''(空字符串)
2.3数值
-
js中所有数字都是64位双精度浮点数
- 第1位:符号位,0表示正数,1表示负数
- 第2位到第12位(共11位):指数部分
- 第13位到第64位(共52位):小数部分(即有效数字)
- 绝对值小于等于2的53次方的整数,即2-53到253,都可以精确表示。
-
数值的进制
十进制:没有前导0的数值。
八进制:有前缀0o或0O的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。
十六进制:有前缀0x或0X的数值。
二进制:有前缀0b或0B的数值。
-
parseInt方法用于将字符串转为整数。
- 如果parseInt的参数不是字符串,则会先转为字符串再转换。
- 字符串转为整数的时候,是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分。
3.如果以0x开头会照16进制解析
4如果以0开头会以10进制解析 - parseInt方法还可以接受第二个参数(2到36之间),表示被解析的值的进制
- 如果第一个参数不是字符串,"0x11"写成0x11则会先转换为10进制,在进行第二个参数的转换
-isNaN()
-
isNaN()可以用来判断一个值是否为NaN。
- isNaN只对数值有效,如果传入其他值,会被先转成数值。相当于isNaN(Number('xxx'))
2.4字符串
- 字符串只能写在一行内,如果要分成多行,每一行末尾加上\和换行符
- 反斜杠(\)在字符串内有特殊含义,用来表示一些特殊字符,所以又称为转义符。
- 字符串可视为字符数组可以使用[]运算符返回某个位置的字符
反斜杠\有3种特殊的用法:
- \HHH
反斜杠后面紧跟三个八进制数(000到377),代表一个字符。HHH对应该字符的 Unicode 码点,比如\251表示版权符号。显然,这种方法只能输出256种字符。 - \xHH
\x后面紧跟两个十六进制数(00到FF),代表一个字符。HH对应该字符的 Unicode 码点,比如\xA9表示版权符号。这种方法也只能输出256种字符。 - \uXXXX
\u后面紧跟四个十六进制数(0000到FFFF),代表一个字符。HHHH对应该字符的 Unicode 码点,比如\u00A9表示版权符号。
- 字符集:
- 每个字符在javascript中都以16位(2个字节)的utf-16格式储存
- JavaScript 使用 Unicode 字符集。JavaScript 引擎内部,所有字符都用 Unicode 表示。
- 由于历史原因,对于码点在U+10000到U+10FFFF之间的字符,JavaScript 总是认为它们是两个字符
- Base64 转码
- 文本有不可打印的符号可以使用base64转码
-
btoa():
任意值转为 Base64 编码
atob():
Base64 编码转为原来的值 - 必须是ASCII 码的字符
2.5对象
- 对象就是hash,就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。
- 对象中所有的key(键名)的都是字符串,如果是数值会自动转换为字符串
- 如果key不符合标识符的条件,(比如第一个字符为数字,或者含有空格或运算符且也不是数字),必须加上引号
- key也叫属性,如果value为函数,那么通常把这个属性称为“方法”,如果属性的值还是一个对象,就形成了链式引用。
- 如果只采用大括号。JavaScript 规定,如果行首是大括号,一律解释为语句(即代码块),如果想表达对象则要咋在外加上圆括号
({a:123})
- 读取属性
obj.p
或者obj['p']
如果不加引号则指向一个变量 - 查看对象的所有属性
Object.keys
-delete
命令可以删除对象的属性,删除不存在的属性也会返回true,不能删除继承的属性 -
in
运算符检查某个对象是否包含某个属性(key) (不能识别是否为继承的,都会返回true) -
for(...in...){}
用于遍历对象的全部属性 - with 语句用来批量操作同一个对象的多个属性(如果with区块内部有变量的赋值操作,必须是当前对象已经存在的属性,否则会生成一个全局变量)
2.6数组
- 数组其实是固定key的对象(hash),key['0'],['1'],['2'].['3'],['4']...都是字符串
- 数组的length是其中最大key+1,不是其中的个数
- 当数组的某个元素是空元素,即2个逗号之间没有任何值,我们称改数组存在空位
- 空位不会影响length属性,空位是可读取的,返回undefined,delete命令删除某个属性,这个位置就形成了空位
- 空位就是数组没有这个元素,所以不会被遍历到,而undefined则表示数组有这个元素,值是undefined,所以遍历不会跳过。
- 类似数组的对象,特征是具有lenght属性,length不是动态的
- 可以使用
var arr = Array.prototype.slice.call(arrayLike)
把对象变成真正的数组