绝对值小于等于 2 的 53 次方的整数, 即 - 253 到 253, 都可以精确表示, 也就是说 15 位的十进制数都可以精确处理;
JavaScript 能够表示的数值范围为 21024 到 2-1023(开区间), 超出这个范围的数无法表示;
NaN 不是独立的数据类型, 而是一个特殊数值, 它的数据类型依然属于 Number;
NaN 不等于任何值, 包括它本身;
单纯的数学运算几乎没有可能抛出错误;
Infinity
与 NaN 比较, 总是返回 false ;
0 乘以
Infinity
, 返回 NaN;
0 除以
Infinity
, 返回 0 ;
Infinity
除以 0, 返回
Infinity
;
parseFloat 方法会自动过滤字符串前导的空格;
parseFloat 会将空字符串转为 NaN;
令 isNaN 为 true 的值, 有可能不是 NaN, 而是一个字符串;
对于对象和数组, isNaN 返回 true;
但是, 对于空数组和只有一个数值成员的数组, isNaN 返回 false.
判断 NaN 更可靠的方法是, 利用 NaN 为唯一不等于自身的值的这个特点, 进行判断:
- function myIsNaN(value) {
- return value !== value;
- }
除了
Infinity
,-Infinity,NaN 和 undefined 这几个值会返回 false ,isFinite 方法对于其他的数值都会返回 true ;
字符串内部的单个字符无法改变和增删, 这些操作会默默地失败;
字符串的 length 属性无法改变, 但是不会报错;
JavaScript 的单位字符长度固定为 16 位长度, 即 2 个字节. 对于码点在 U+10000 到 U+10FFFF 之间的字符, JavaScript 总是认为它们是两个字符 (length 属性为 2). 所以处理的时候, 必须把这一点考虑在内, 也就是说, JavaScript 返回的字符串长度可能是不正确的;
属性可以动态创建, 不必在对象声明时就指定;
如果不同的变量名指向同一个对象, 那么它们都是这个对象的引用, 也就是说指向同一个内存地址. 修改其中一个变量, 会影响到其他所有变量;
JavaScript 规定, 如果行首是大括号, 一律解释为语句 (即代码块). 如果要解释为表达式 (即对象), 必须在大括号前加上圆括号:
- eval('{foo: 123}') // 123
- eval('({foo: 123})') // {foo: 123}
请注意, 如果使用方括号运算符, 键名必须放在引号里面, 否则会被当作变量处理:
- var foo = 'bar';
- var obj = {
- foo: 1,
- bar: 2
- };
- obj.foo // 1
- obj[foo] // 2
注意, 数值键名不能使用点运算符 (因为会被当成小数点), 只能使用方括号运算符:
- var obj = {
- 123: 'hello world'
- };
- obj.123 // 报错
- obj[123] // "hello world"
查看一个对象本身的所有属性, 可以使用 Object.keys 方法:
- var obj = {
- key1: 1,
- key2: 2
- };
- Object.keys(obj);
- // ['key1', 'key2']
delete 命令只能删除对象本身的属性, 无法删除继承的属性;
in 运算符的一个问题是, 它不能识别哪些属性是对象自身的, 哪些属性是继承的:
- var obj = { p: 1 };
- 'p' in obj // true
- 'toString' in obj // true
来源: https://www.cnblogs.com/endymion/p/9165134.html