一.JS的一些语法特性

1.值类型自转换

1.1 Boolean类型的自动转换

var b=Boolean(obj);
//当obj为0,NaN,""(空字符串),undefined,null,false的时候返回false,其余情况返回true,也就是说:即使obj等于"false"(字符串),也是返回true


常用代码:
var txt=document.getElementById("txtEmail");
if(txt!=null){
//存在该元素
}
也可以写作
if(txt){//Boolean(txt)省略
//存在该元素
}

jQuery的使用不同
var txt=$("#txtEmail");//返回的是object类型

//所以得
if(txt.length>0){
//存在该元素
}


var arr=[0,1,2,3];
$(arr).each(function(){
if(this){
alert(this);
//结果当this为0的时候也输出了0,因为这里this其实是object类型的
}
});
//所以请谨慎使用jQuery的each功能,尽量不用.

1.2 数字类型与字符串类型相互转换

除了对字符串类型使用+操作符,其它的使用针对数字类型的数学操作符都将使字符串自动转化为数字类型

var str="6";
alert(str+2);//输出62
alert(str-2);//输出4
alert(str*2);//输出12
alert(str/2);//输出3
alert(str%2);//输出0

字符串与数字类型的 == 比较时,字符串自动转化为数字类型

alert("6"==6);//true
alert(parseInt("6a")==6);//true
alert("6a"==6);//false
alert(" 6 "==6);//true 会忽略空格


小结:
js脚本的数字类型和字符串类型,在很多系统级函数中都可以自动相互转换。
而在对object类型使用字符串的操作符时,会自动调用object对象的toString() (和c#一样)


alert(Math.max("6",5));//输出6

var textbox=document.createElement("input");
textbox.type="text";
textbox.value=5;//给dom元素的字符串属性赋值
textbox.setAttribute("rel",5);//

var div=document.createElement("div");
var obj={};
obj.toString=function(){
return "hello world!";
}
div.innerHTML=obj;

2.灵活的 || 和 && 操作符
var a = b || c;
//当Boolean(b)为true的时候,返回b
//当Boolean(b)为false的时候,返回c
//注意返回的不是true或者false,是b或者c


所以有
var a = 0||1;//返回1
var a = 2||1;//返回2
var a = null||{};//返回{}

常见的用法

//兼容处理
document.onclick=function(e){
var evt=e||window.event;//当为ie浏览器的时候,e为undefined
var element=evt.srcElement||evt.target;//当为ie浏览器的时候,evt.srcElement存在
alert(element.tagName);
}

//jQuery不用处理兼容性
$(document).click(function(e){
alert(e.target);//无论是ie或者firefox,e都是直接使用
});

var a = b && c;
//当Boolean(b)为true的时候,返回c (不管c是什么)
//当Boolean(b)为false的时候,返回b (不管b是什么)

常见的用法
if(window.aArray && window.aArray.length>0){

}
//先判断有没有aArray对象,再判断length是否大于零,比较安全.
( 除了作判断之外,&&一般不用于给对象返回值)

bt的例子,不建议这样使用,难读懂
document.onclick=function(e){
var target = (e && e.target) || event.srcElement;
}

综合例子,func()可能返回数字,也可能是空(null或undefined),当为空或者为负数的时候,让其变成0,正数则保持原样

var obj=func();
if(obj){
//如果为负数
if(obj<0)obj=0;
//else不用处理
}else{
//null,undefined,0时
obj=0;
}

简化为

obj=Math.max(obj||0,0);