这些是为不支持script的浏览器准备的,如果不支持script,那么<!-- -->就生效了,用以避免不支持script的浏览器把script输出在页面上。而加入这些,对于支持script的浏览器的脚本执行不会造成任何不良影响。
2、特殊的String类型。
很多语言,比如在java中char,int是原始类型,String对象是引用类型,继承自Object对象,存储在堆中。
但是在javaScript中String虽然仍然是变长的,但确是原始类型,存储在栈中。
3、善用typeof
判断一个变量a是否已经定义,最好的办法不是if(a)而是if(typeof a!="undefined"),这种绝对不会报错。
typeof的返回值是比较固定的,number,function,object,string,undefined。
因为Array,Date,都是Object的子类,所以他们的对象的type也是Object。而且typeof null == "object" 原理同Java。
4、善用instansof
既然Array对象的type是object,那么对于弱类型的语言JS来说如何判断一个变量是否是Array呢(迟早会遇到这样的需求)?
使用var a = new Array(); alert(a instanceof Array);他返回的boolean值会非常明确的告诉你正确与否。
而且还可以使用alert(a instanceof Object)来印证Array是Object的子类。
如果还使用prototype原型链(不是prototype.js,而是它之所以这么命名的核心)来构建自己的继承对象的话,instanceof会更有效。
还可以在function内用alert(typeof arguments)验证arguments对象的存在用alert(arguments instanceof Array)来印证arguments并不是Array的实例,虽然很像。
5、使用for...in...对Object类型对象的遍历
var obj = new Object();
obj.num = 1;
obj.String="s";
obj.date = new Date();
。。。。。。
如何遍历到obj中的所有内容呢?
for(skey in obj){
alert("属性:"+skey+"的内容为:"+obj[skey]);
}
6、运算有时并不是精确的
据说主要是因为javascript采用是64位的数字.最高精度只能精确到16位。而且算来算去1+1可能等于1.99999999。
得到想要结果需要借助Math.floor() Math.ceil() Math.round()只是舍入的方法。
JS也是支持位运算的,这个一般人儿用不到。
如果想得到指定位数小数、指数等形式数字表示串,可以使用
<script>
a=330 * 0.01;
alert(a.toFixed(2));//返回一个字符串,代表一个以定点表示法表示的数字。
alert(a.toExponential(2));//返回一个字符串,其中包含一个以指数记数法表示的数字。
alert(a.toPrecision(3));//返回一个字符串,其中包含一个以指数记数法或定点记数法表示的,具有指定数字位数的数字。
</script>
如果您非要在前端实现高精度计算,n多真正的高手等着呢。
http://www.coolcode.cn/?p=120
看看这位朋友的文章
7、javaScript的三个组成部分
javaScript核心:ECMAScript的一个实现,描述语法和基本对象。
DOM:处理网页内容的方法和接口
BOM:与浏览器间的进行交互的方法和接口
开始我区分不开哪个是js核心、哪些是DOM、哪些是BOM、甚至BOM都很少听说
后来我一直只把第一部分当作javaScript,分得开的原因是我分别拥有2本参考手册,js手册和dhtml手册。
两个CHM文件对于我对javaScript各个部分的理解是潜移默化的,建议大家也搞两本手册或这看MSDN时注意下目录结构呵呵。
JS核心只有 String、Array、Boolean、Date、Error、Function、Number、Object、RegExp等等有限几种
像div,a等等都是DOM对象getElementById是DOM方法,我问过的人经常搞混掉
而BOM没有什么标准,window就是BOM对象,BOM主要负责和浏览器打交道,各浏览器差异也比较大
为什么要区分这些呢,这会对于ECMAScript标准和DOM标准有比较完整的理解,对于开发跨浏览器的JS有莫大的帮助