Javascript基础学习(2)_表达式和运算符
1.==和===的区别(!=和!==是相反的比较)
它们采用了同一性的两个不同定义。==是相等性,===是等同性。
①“===”进行两个值的比较
- 两个值的类型不同,就不相等
- 两个值是数字,并且值相同,除非其中一个或者两个都是NaN,否则他们是相同的。NaN和NaN也是不同的,判断一个值是否是NaN,可以使用全局函数isNaN().
- 两个值是字符串:如果长度不相等就不相同,如果长度相同并且每一个索引的字符也相同就认为两个字符串相同。
- 两个值是布尔值,同为true或者false就认为相同
- 两个值是对象、数组或者函数:如果它们引用同一个对象就认为相同,如果引用了不同的对象就认为不同,即使这两个对象具有完全相同的属性或者两个数组有完全相同的元素。
②“==”进行两个值的比较
如果两个值具有相同的类型,那么就检测他们的等同性。如果这两个值完全相同。他们就想的,如果不完全相同,则它们就不相等。
如果两个值的类型不同,它们也有可能相等。
- 如果一个值是null,一个是undefined,那么认为它们相等。
- 如果一个值是数字,另一个是字符串,把字符串转换为数字,再用转换后的值进行比较。
- 如果一个值是false,转化为0,进行比较,值为true,转化为1进行比较。
- 如果一个值是对象,另一个值是数字或者字符串,将对象转换成原始类型值,再进行比较。
- 其他的数值组合是不相等。
例子:
"1" == true
先把true转换成数字1,然后把"1"转换成数字1,两者对比相等,于是返回true。
感觉上,==进行比较有一个转换的过程。而===是没有这种感觉的,类型不同直接就返回false。
2.in运算符
in运算符要求其左边的运算数是一个字符串,或可以被转换为字符串,右边运算数是一个对象或者数组。
如果左边的值是右边对象的一个属性名,他返回true。
3.instanceof运算符
左边运算数是一个对象,右边是运算数对象类的名字。
如果左边运算数是右边类的一个实例,它返回true,否则返回false。
如果左边不是一个对象,右边是一个对象,那么它将返回false
4.字符串运算符
当+用于字符串和数字时,它并不一定具有结合性。简而言之,就是结果依赖于操作执行的顺序。从下边的例子可以发现这一点:
S = 1+2+"blind mice" //结果是"3 blind mice"
T = "blind mice:" +1+2 //结果是"blind mice:12"
5.其他运算符
- 条件运算 ?: 例子 x>0 ? x*y : -x*y;
- typeof运算符
- 对象创建运算符 new
- delete 运算符 作用是删除一个对象的属性,数组元素或者变量。(注意并不是所有的对象的属性和变量都是可以删除的,某些内部核心属性和客户端属性不能删除,用var声明的用户定义变量也不能被删除)(如果使用delete运算符删除一个不存在的属性,它返回的是true)
- void运算符 它是一个一元运算符,可以出现在任何类型操作数之前。用法比较特殊,它总是舍弃运算数的值,然后返回undefined。这种运算符常用在客户端的Javascript:URL中,可以计算表达式的值,而不浏览器显示出来。