无双

博学善思,自强不息

导航

js学习笔记(四)表达式和运算符

1、如果不清楚运算符的优先级,最简单的办法就是使用括号来明确表明计算顺序

    赋值操作的优先级非常低,几乎总是最后才被执行

2、如果“+”(加号)运算符表达式中一个是字符串,而另一个不是,则另一个会被自动转换为字符串;

    如果加号运算符中一个运算数为对象,则这个对象会被转化为可以进行加法运算的数字或可以进行连接运算的字符串,这一转化是通过调用对象的valueof()或tostring()方法来实现的。

3、如果“-”减法运算符的运算数不是数字,那么系统会自动把它们转化为数字。

    也就是说加号运算数会被优先转化为字符串,而减号运算数会被优先转化为数字。以此类推,只能进行数字运算的运算符的运算数都将被转化为数字。(比较运算符也会优先转化为数字进行比较)

4、加号运算符有将参数转化为数字的功能,如果不能转化为数字则返回NaN

    如 var a=”100”;   var b=+a  此时b的值为数字100

5、递增运算符(++),只能运用于变量,如果用在变量前则为前递增运算符,如果用于变量后面则为后递增运算符。前递增运算符会用递增后的值进行计算,而后递增运算符用递增前的值进行运算,如:

   var a=1

   var b= a++  //此时b的值为1,因为b的值是a递增前的值。但a的值已经为2了,

   var a=1

   var b=++a  //此时b的值为2,a的值也为2

递减运算符(--)的用法与递增运算符的用法相同

6、关于(===),要想使等式成立,需满足的条件是:

  •       等式两边值相同,类型也相同
  •       如果等式两边是引用类型的变量,如数组、对象、函数,则要保证两边引用的是同一个对象,否则,即使是两个单独的完全相同的对象也不会完全相等。
  •      等式两边的值都是null或undefined,但如果是NaN就不会相等

7、关于(==),要想使等式成立,需满足的条件是:

  • 等式两边类型不同,但经过自动转化类型后的值相同,转化时如果有一边为数字,则另一边的非数字类型会优先转化为数字类型;布尔值始终是转化为数字进行比较的,不管等式两边中有没有数字类型,true转化为1,false转化为0。对象也会被转化。
  • null==undefined

8、比较运算符如大于、小于等只能对数字或字符串进行比较,不是数字或字符串类型的,将被转化为数字或字符串类型。如果同时存在字符串和数字,则字符串优先转化为数字,如不能转化为数字,则转化为NaN,此时表达式最后结果为false。如果对象可以转化为数字或字符串,则它会被优先转化为数字。如果运算数都不能被转化为数字或字符串,则结果为false。如果运算数中有一个为NaN, 或被转化为了NaN,则表达式的结果总是为false.当比较两个字符串时,是将逐个字符进行比较的,按照的是字符在Unicode编码集中的数字,因此字母的大小写也会对比较结果产生影响。

9、in运算符要求其左边的运算数是一个字符串或者可以被转化为字符串,右边的运算数是一个对象或数组,如果左边的值是右边对象的一个属性名,则返回true.

10、intanceof运算符要求其左边的运算数是一个对象,右边的运算数是对象类的名字,如果运算符左边的对象是右边类的一个实例,则返回true。在js中,对象类是由构造函数定义的,所以右边的运算数应该是一个构造函数的名字。注意,js中所有对象都是Object类的实例。

11、+运算符用于数字或字符串时,并不一定就都会转化成字符串进行连接,如:

     var a=1+2+”hello”    //结果为3hello

     var b=”hello”+1+2    //结果为hello12

产生这种情况的原因是 + 运算符是从左到右进行运算的。

12、因为(=)被定义为一个运算符,所以可以将它运用于更复杂的表达式。如:

      (a=b)==0  //先给a赋值b,再检测a的值是否为0.

     赋值运算符的结合性是从右到左的,因此可以这样用:

      a=b=c=d=100    //给多个变量赋同一个值

13、typeof 也是一个运算符,用于返回运算数的类型,typeof也可以用括号把运算数括起来。typeof对对象和数组返回的都是object,因此它只在用来区分对象和原始数据类型时才有用。

14、delete是一个一元运算符,用来删除运算数指定的对象属性、数组元素或变量,如果删除成功返回true,删除失败则返回false。并不是所有的属性和变量都可以删除,比如用var声明的变量就不能删除,内部的核心属性和客户端的属性也不能删除。要注意的是,用delete删除一个不存在的属性时(或者说它的运算数不是属性、数组元素或变量时),将返回true。

  delete影响的只是属性或变量名,并不会删除属性或变量引用的对象(如果该属性或变量是一个引用类型时)

15、void也是一个一元运算符,它会忽略它的运算数并返回undefined

posted on 2010-05-16 12:27  无双  阅读(2490)  评论(0编辑  收藏  举报