1 < script>标记的defer和async
defer:立即加载(不阻塞后续html加载),所有元素解析完成后,执行script
async :乱序立即加载(不阻塞后续html加载),script加载完成后,立即执行script;
##
2.2 null==undefined,平常使用常常会忘记,而去判断两次
3.4 isNaN() 是否NaN
Number() 将不同类型的数据转成数字类型
3.5.2 按位操作符
^ 按位异或 [不相同则为1,相同则为0]
<< 左移 `1<<31 -2147483648,补码 = 反码 + 1`
>> 右移
>>> 无符号右移
3.5.6 字符串比较按照字符编码进行比较,所以对字母的大小写比较要注意
所以对数字的相互比较,也必须要保证其中一方为数字
3.5.10 逗号操作符:用于声明变量和赋值(赋值时总是返回表达式最后一项)
//3.6.6 label语句 用于给for等循环代码加标签,以便将来被break和continue使用;
aaa:for(;;){
//dosomething....
for(;;){
break aaa;
}
}
3.7 函数有内置参数数组arguments,可以用以获取传入的参数,即使方法定义本身没有设置传入参数;但在严格模式下,arguments对象不允许被修改
js的方法参数传递和java类似都是值传递,但是由于对象变量的值是对象内存的引用,所以方法内部对对象进行修改会改变外部值
4 .变量,作用域,内存问题
一个函数即为一个执行环境,内部的临时变量属于函数的作用域,一旦函数执行完毕,该环境也就被销毁,局部变量等也同样被销毁;一层层的作用域形成作用域链.
js中没有[块级作用域],而java中有.
垃圾回收机制:标记清除/引用计数(废弃);因为当存在变量重复引用时,引用清除将不具备可靠性;
所有变量当不再需要时,最好的做法是=null;这样可以便可以在下一次垃圾回收时释放掉不必要的消耗;
5 .引用类型
instanceof 当存在多层js框架时,js的Array的构造就会不同,所以用来检测是否是Array就会不准确,这个时候最好使用Array.isArray(目标数组)方法
5.4. 正则RegExp
匹配模式:g(全局匹配global模式)
i(case-insensitive)大小写敏感匹配模式
m(multiline)多行匹配模式
Eg: /表达式/gi