js语法知识二:运算符

利用运算符进行类型转换:
"s" + n:将数字类型转换成字符串
"s" - n:将字符串转换为数字类型
eg:
[code]var a = 2.96;
var b = 1.0;
var c = "2.96";
alert(a+b);//得到数值3.96
alert(a + "" + b);//得到字符串2.961
alert(c + 1);//得到字符串2.961
alert(c - 0 + 1);//得到数值3.96[/code]

另外,运算符的隐式数值转换和parseFloat并不完全相同,eg:
[code]JavaScript:parseFloat("123abc");//得到数值123
JavaScript:"123abc" - 0;//得到NaN[/code]

运算符"*"、"\"在进行运算时,如果参与运算的未非数值,运算符会将它们转换成数值进行计算,另外,javascript并不区分数值的精度类型,因此当用一个整数来初另一个整数时,得到的结果可能是浮点数,如果希望得到整数商,需要调用Math.floor()方法来进行精度处理,当除法的除数为0时,运算结果通常为Infinity,而如果是0/0,则结果将得到NaN。
取模运算也适用于浮点数,运算结果的精度和两个运算数中精度最高的那个相同,例如-4.3%2.11得到-0.08
如果两个运算数的值都为null,运算符"=="返回true;如果两个运算数的值都是undefined,运算符"=="返回true;如果两个运算数一个是null,一个是undefined,运算符"=="返回true。只要有一个运算数为NaN或者被转换为NaN,那么运算符"=="返回false。(a>||a==b)和a>=b并不严格等价,比如(null>undefined||null == undefined)的计算结果为true,而null >= undefined的计算结果却为false。
[color=Blue]**小技巧**[/color]:对任何表达式a连续使用两次"!"运算符(即!!a),都可以将它转换成一个布尔值。

[color=Blue]对象运算符:[/color]
JavaScript中的对象运算符包括in运算符、instanceof运算符、new运算符、delete运算符、.运算符和[]运算符。其中,"in"要求其左边的运算数是一个字符串,或可以被转换为字符串,右边的运算数是一个对象或者数组,如果该运算符左边的值是其右边对象的一个属性名,它返回true。eg:
[code]var point = {x:1, y:1};
var m_x = "x" in point;//值为true
var m_y = "y" in point;//值为true
var m_z = "z" in point;//值为false
var ts = "toString" in point;//继承属性:值为true[/code]
对象运算符"instanceof"要求其左边的运算数是一个对象,右边的运算数是对象类的名字。如果运算符左边的对象是右边类或者它的派生类的一个实例,它返回false,否则返回true。eg:
[code]alert("" instanceof Object);
alert({} instanceof Object);
alert([] instanceof Object);[/code]
对象运算符"delete"是一个单目运算符,它将删除运算数所指定的对象属性、数组元素或者变量。如果删除成功,它将返回true,否则将返回false。
注意:并非所有的属性和变量都是可以被删除的,某些内部的核心属性和客户端属性不能被删除,用var语句声明的变量也不能被删除。如果delete使用的运算数是一个不存在的属性,它将返回true。前面介绍"in"运算符时成精提到过用对象作为集合,配合上"delete"运算符可以很方便地实现集合元素的插入、检索与删除。eg:
[code]var aSet = new Object();//定义一个集合
if("key1" in aSet) //如果key1已经存在,删除原有元素
delete aSet["key1"];
aSet["key1"] = true; //插入新元素(无论原来是否存在)
if(delete aSet["key2"]) //如果key2存在
aSet["key2"] = true;//删除原有元素,更新key2[/code]

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复