<script>标签的属性async和defer的异同:
两者都是异步加载js,即在渲染dom的同时加载解析js文件。不同之处在于,存在async属性的js文件会在加载的同时去执行,即渲染dom、加载js文件和执行js文件是并行的;存在defer属性的js文件在渲染完dom后才会执行,即渲染dom和加载js文件是并行的,当渲染完dom后才会执行js。defer属性更符合实际应用,它考虑到了文件和dom的依赖关系。但是把<script>标签放到body标签前面位置时,就不需要defer属性了,加上会有点画蛇添足。ps:w3school中“只有Internet Explorer 支持defer属性”的说法是错误的,http://www.w3school.com.cn/tags/att_script_defer.asp。
<noscript>标签:
该标签中的内容在浏览器不支持脚本或者脚本被禁用的情况下显示。一般用来显示提示信息“本页面需要启用javascript。”
isNaN:
isNaN函数会尝试把接受的参数转换为数字类型,转换失败会返回true,转换成功会返回false。所以isNaN("10")返回false,isNaN(true)会返回false,isNaN(null)返回false,isNaN(false)也会返回false。测试对象时,会调用对象的valueOf()方法,检测返回值能否转为数值,如果不能,再调用返回值的toString()方法,再测返回值。转换机制与Number()函数的转换规则一致。
switch:
在switch语句中使用任何数据类型都可以(在很多语言中只能使用数值和字符型数据类型)。每个case值可以是变量、表达式。var num = 1; switch(true){//当case表达式结果和true相等时,运行当前case下的表达式 case num<0: alert("<0"); break; case num=0: alert("=0"); break; default: alert("<0"); }
switch语句在比较时,用的全等(===),不会发生数据转换。
使用函数表达式定义函数:
使用函数表达式定义函数,函数末尾要加分号,就像声明其他变量一样。
function myFunc1(){ doSomeThing... } var myFunc2 = function(){ doSomeThing... };//注意这里有分号
new Boolean():
使用false创建一个Boolean对象,对其进行判断,其实是对一个对象进行的判断,所以是truevar falseObj = new Boolean(false); if(falseObj){//true console.log(falseObj); }
重新声明变量:
var a = 1; var a; console.log(a); //1像这样重新声明一个变量,没有效果。但是会执行声明中的变量初始化。