1、<script>标签
1、在<script></script>中不要在任何地方出现</script>字符串,如alert(“</script>”) 这样会终止执行,所以可以改为alert(“</script>”) 转义一下
2、defer属性,等页面加载完成之后才开始加载js文件
<scripttype="text/javascript"defer="defer"src="js.js"></script>
3、async异步加载js
<scriptasync="async"src="js.js"></script>
2、类型判断
typeof
var message = "aa";
alert(typeof (message)) //“String”
typeof 一般只能返回如下几个结果: number,boolean,string,function,object,undefined
对于 Array,Null 等特殊对象使用 typeof 一律返回 object,这正是 typeof 的局限性
instanceof
instanceof 用于判断一个变量是否某个对象的实例
var person = new Array();
alert(person instanceof Array);
3、作用域
jS中没有块级作用域,也就是在方法中的内部用{ }两个花括号括起来的部分是没有单独的作用域的。放到方法中则不会出现这种问题。块级作用域和其他语言(如C#)有所不同。
if (true) {
var color = "red";
}
alert(color); //结果 red
所有变量都存在于一个执行环境(也称为作用域)当中,这个执行环境决定了变量的生命周期,以及哪一部分代码可以访问其中的变量,下面是总结:
1、 执行环境有全局执行环境和函数执行环境之分。
2、 每次进入一个新执行环境,都会创建一个用于搜索变量的函数的作用域链。
3、 函数的局部环境不仅有权访问函数作用域中的变量,而去有权访问父环境的任何数据。
4、 执行环境中的变量查找是向上查找,也就是说先从当前内部进行查找是否有这个变量,如果有则立即返回,如果没有则向上继续查找。
4、垃圾回收
将不在用的全局变量或对象或变量的值赋值为null可以有效的进行垃圾回收
垃圾回收机制分为标记清除和引用计数清除
标记清除:是目前主流的垃圾回收算法。这种算法的思想是给当前不使用的值加上标记,然后进行回收。
引用计数:这种算法的思想是跟踪记录所有值被引用的次数,目前不在使用这种方法,因为如果出现循环引用的现象时,这种算法会出现无法回收的现象。
解除变量的引用不仅有助于消除循环引用的现象,而且对垃圾收集也有好处,所以应该及时解除不再使用的全局对象、全局对象属性的引用。
4、Number类型
var num = 10.005; alert(num.toFixed(2)); //保留两位小数 10.01 var num1 = 10;
依次对数值转换不同的进制数。
alert(num1.toString()); alert(num1.toString(2)); alert(num1.toString(8)); alert(num1.toString(16));
Math对象
用Math方法对数组取最大值
var values = [1, 2, 3, 4, 5, 6, 7]; var max = Math.max.apply(Math, values); //7 var max1 = Math.max(values); //NaN alert(max1);
正常语句Math.max方法是不可以对数组进行取最大值的,可以用applay方法进行改写,这个技巧的关键是吧math对象作为apply的第一个参数,从而正确的设置this的值
Math.Ceil() 执行向上舍入,向上舍入最为接近的数。
Math.floor() 执行向下舍入,向下舍入最为接近的整数。
Math.round() 执行标准舍入,四舍五入
Math.random() 产生一个从0到1的随机数。