the part that is good is not original, and the part that is original is not good.--Samual johnson
JS 之父曾引用英国诗人的这句话来评价其创造的 JavaScript 语言. 信息量挺大, 详见 JS 诞生时的历史.
众所周知, JS 有七种数据类型: number string null undefined object boolean symbol, 其中 symbol 目前不很常用."数据类型有什么好讲的, 直接用不就是了?", 如果你对一个人足够感兴趣, 我想你会去想了解他的前半生的.
由于 Brendan 创造 JS 的时候很大程度上借鉴了 Java 的数据类型, 所以这里我们来比较一下两者的数据类型. 可以明显看出, 关于数值的各个类型被 brendan 统一成 number, 只要是数值相关的, 那在 JS 中就是 number 类型, 不管形式, 不管大小 (其实管, 后文会提到).char 在 JS 中对应了 string. 为纪念伟大的乔治. 布尔先生, brendan 没有对 boolean 进行任何改动 (瞎猜的). 引用类型就有趣了, 万物归于 object.
为什么 JS 可以一个 number 解决所有的数值类型, 或者说一个变量就可以任意类型的数据. 答案在你开始学习 JavaScript 的那几段话中,"JavaScript 是一种动态类型, 弱类型... 的语言". 动态类型意味着在声明一个变量之后, 可以存储不同类型的变量. 也就是说在 JS 中声明一个变量 a, 他的初始值是 13,var a= 13, 在这语句之后, 你仍然可以再写一个这样的语句 a = '13.333' 来改变 a 的值且不会报错, 甚至可以写 a = 'name is sam' .
不扒历史钻字眼了, 探索和收敛的度需要控制好. 下面逐一介绍每个数据类型.
number
JavaScript 内部, 所有数字都是以 64 位浮点数形式存储, 整数也是.
JavaScript 能够表示的数值范围是 2^-1023 到 2^1024, 超出的范围的数无法表示.
溢出能够表示的范围会返回 Infinity(正数) 或者 0(负数)
数值可以有多种表示方法, 字面形式和科学计数法.
字面形式: 35 0xFF(十六进制) 123e.
除以下情况外都采用字面形式表示, 小数点前数字多于 21 位或后的零多于 5 个.
有四种进制来表示字面量: 十进制 十六进制 八进制 二进制.
属于 number 类型的特殊数值:-0 +0 NaN 正负 Infinity.
NaN 参与的绝大部分运算都会得到诸如 NaN false 这样的答案.
数值相关的全局方法 parseInt() parseFloat() isNaN() isFinite()
string
字符串默认只能写在一行内, 分成多行将会报错, 如果必须, 要在每一行的结尾使用反斜杆, 但反斜杆后不能有诸如空格的其他字符.
连接运算符 + 可以连接多个单行字符串, 将长字符串拆成多行书写.
length 属性返回字符串长度.
由于历史原因, JavaScript 使用 Unicode 字符集.
btoa() 将任意值专为 Base64 编码, atob() 将 base64 编码专为原来的值.
null & undefined
都表示没有, 在真值判断中都是 false,null == undefined
二者的来由很有历史原因, 最开始 null 用于标识对象为空, 这也是现在
tyepof null //object
的原因, 之后又添加了一个 undefined 类型.
二者的区别, null 是一个表示'空'的对象, 专为数值时为 0,undefined 是一个表示此处无定义的原始值, 转为数值时为 NaN.
Boolean
除了以下值: undefined null false 0 NaN ""或者' '其他值都视为 true.
空数组和空对象都是 true.
object
注意, 开头是小写的 o.
对象是一组键值对的集合 (key-value), 是一种无序的符合数据集合.
对象里的 value 可以是各种类型的数据, 对象里可以嵌套对象.
key 都是字符串, 可加可不加引号.
存放于对象中的函数称为方法.
对象属性的读取和赋值 objec.property || object['property'].
可通过
(Object.keys(obj)).length
获得对象 key 的长度.
使用 delete 命令删除对象属性值 delete obj.p.
使用 in 运算符检查对象中是否有某个属性'p' in obj.
使用 for in 循环遍历对象属性, 会跳过不可遍历属性, 且遍历继承的属性.
学到的东西不够多, 就无法把这些点恰如其分的串联起来.:(
来源: https://juejin.im/post/5bfec2abf265da6135724a22