- 使用
/* */
作为注释是不安全的,如果注释当中有正则,会用到/**/
相关的字符,所以不建议使用/* */
,只使用//
注释即可。 - JavaScript不允许在对象字面量中,或者用点运算符提取对象属性时,使用保留字作为对象的属性名。
- JavaScript数字只有一种数据类型,像Java的double一样,是64位浮点数。
- NaN是一个数值,但不等于任何值(包括自己),可以用
isNaN()
来检测 - 一共有三种方式定义全局变量:
- 第一种是在任何函数之外放置一个
var
语句 - 第二种是直接给全局对象添加一个属性。在Web浏览器里,全局对象名为
window
:window.foo = value
。 - 第三种是直接使用未声明的变量(隐式全局变量),这种方式并不推荐,以为虽然不会报致命错误,但是一旦出bug排查起来是非常困难的。
- 第一种是在任何函数之外放置一个
- 请注意
==
和===
的区别,前者会转换类型。
'' == '0' // false
'0' == '' // true
0 == '0' // true
false == 'false' // false
false == '0' // true
false == undefined // false
false == null // false
null == undefined // true
'\t\r\n' == 0 // true
- JavaScript有自动修复机制,使得当你不写分号
;
的时候也能正常使用程序,但是正是这种自动补全分号的行为使得一些编写不规范的代码容易出错:
//返回undefined
return
{
status: true
};
//正常返回
return {
status: true
}
- 有很多并没有使用的词被保留作关键词,所以使用变量时要尽量避免使用这些词,如果使用,那么在访问的时候要书写规范,比如加引号,以下是保留词(JS关键词):
abstract, boolean, break, byte, case, catch, class, const, continue, debugger, default, delete, do, double, else, enum, export, extends, false, final, finally, float, for, function, goto, if, implements, import, in, instanceof, int, interface, long, native, new, null, package, private, protected, public, return, short, static, super, switch, synchronized, this, throw, throws, transient, true, try, typeof, var, volatile, void, while, with
- typeof用于识别数字时返回
'number'
,但是typeof识别null
时返回'object'
,于是它不能分辨null
和对象
//typeof & undefined
typeof null // object (因为一些以前的原因而不是'null')
typeof undefined // undefined
null === undefined // false
null == undefined // true
null === null // true
null == null // true
!null //true
isNaN(1 + null) // false
isNaN(1 + undefined) // true
parseInt()
可不是一个好函数,不光是转换数字的时候遇到非数字就停止不转了,还会把0
开头的当做八进制来处理,八进制没有8和9,导致parseInt("08")
和parseInt("09")
都会返回0,但是后面可以加参数来确定到底是几进制,但是很不喜欢这个函数。- 数组,原始类型中没有数组,它属于对象的一种,这时候要科普一下基本数据类型了:
两个你不想见到的类型:null
和undefined
,两个最常用的类型number
和string
,一个boolean
类型,一个新出的symbol
类型,剩下的,全是对象类型(包括标准的对象,数组,日期,Json等等,见https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Data_structures)。但是你不要说JavaScript里什么都是对象,因为什么都可以括号括起来然后.
什么什么的它就是对象,数字和字符串之所以可以后面跟.
什么什么,是因为在JavaScript里数字和字符串是“有属性”的,具体参见刚才的文档。 - 假值:在JavaScript里能判定为假的还真不少,有:
0, NaN, '', false, null, undefined
但是你不能用==
来判断其中两个不同的东西能给你返回true
。