zoukankan      html  css  js  c++  java
  • Js整理备忘(02)——运算符

    1、运算符的表示以及优先级

    Javascript(以下简写为Js)的大部分运算符与C或Java是类似的。

    记得刚学C语言时老师讲的优先级口诀,非常好记:“括、单、算、移、关”“位、逻、条、赋、逗”,此处也可以套用一下,便于记忆。

    (1)标点符号表示,比较普遍,略。

    (2)用关键字表示,和一般的运算符一样,都是正则运算符,只是更具有可读性,此处详细列出几个。

    delete:用于删除指定的对象的属性、数组元素或变量;结合性:R;运算数类型:lvalue

    typeof:用于返回数据类型;结合性:R;运算数类型:任意

    void:用于返回未定义的值;结合性:R;运算数类型:任意

    以上三个属于一元运算符,也叫单目运算符(即口诀中的“单”),运算数只有一个

    instenceof:用于检查对象类型;结合性:L;运算数类型:对象,构造函数

    in:用于检查对象的某个属性是否存在;结合性:L;运算数类型:字符串(属性名),对象

    以上两个属于关系运算符(即口诀中的“关”)

    注意:

    lvalue:上面提到运算符delete的运算数类型是lvalue,lvalue指的是能够合法出现在一个赋值表达式左边的表达式。Js中变量、对象的属性、数组的元素都是lvalue型的

    结合性(associativity):一元运算符、赋值运算符、三元条件运算符结合性是R,从右到左进行运算。

    2、部分运算符的使用说明

    如果运算数非数字,则运算前都会先尝试将其自动转换为数字,这是算术运算过程中的通用特性。

    (1)除法运算符(/)

    Js中所有数字都是浮点型,这一点跟区分整数和浮点数的程序语言不同,如5/2结果是2.5,而不是2

    除数为0的结果是正无穷大(Infinity)或者负无穷大(-Infinity),而0/0结果则是特殊值NaN

    (2)模运算符(%)

    取模运算通常都是整数,但Js中也适用于浮点数,如-4.3%2.1=-0.1

    (3)=、==和===

    为了区别,可将“=”读作“得到或赋予”;“==”读作“等于”;“===”读作“完全等同”。

    ==与===用于比较两个运算数是否相等

    相同点:

    Js中,数字、字符串、布尔值使用的都是值(value)比较,值相等则相等或等同。

    比较对象、数组、函数时使用引用(reference),若两个变量引用同一个对象,则两变量才相等。也就是说两个数组无论如何也不会相等,即使他们存放的元素完全相同。

    NaN不与任何一个值(包括NaN本身)相等或等同,检测一个值是否是NaN,可用全局函数isNaN()。

    不同点:

    ===

    ==

    类型不同,则不等同(!==) 类型不同,仍然可能相等
        如一个是null,一个是undefined,则两者相等
        若两者转换后的值(value)相等,则返回true
        若一个是对象,另一个是数字或者字符串,则会先将对象转换为原始类型的值。Js核心语言内部通常先尝试valueof()转换,再尝试toString()转换;但是对于Date类,则先执行toString()转换。

    (4)比较运算符

    比较运算符只能在数字或字符串上执行,所以不是数字或字符串的运算数将会先转换成数字或字符串。

    当字符串与数字比较时,先转换成数字,再执行数字比较。

    (5)in 运算符

    二元运算符,要求左边运算数是一个字符串,或可以转化为字符串,右边运算数是一个对象或数组。

    如果左边字符串是右边对象的一个属性名,则返回true

    (6)instenceof 运算符

    二元运算符,要求左边运算数是一个对象,右边运算数是对象类的对象名。

    如果左边的对象是右边对象名的一个实例,则返回true

    (7)逻辑&&、||、!

    常用于执行布尔代数,另外

    “||” 也可以这么使用:var max=width||height||500;这一用法通常是选取一组备选值中第一个定义并且非空的值。

    “!”对任何值x应用两次都可以将该值转换为一个布尔值。

    (8)typeof 运算符

    一元运算符,返回运算数的类型

    若运算数是数字、字符串或布尔值,返回“number”、“string”或“boolean”

    若运算数是对象、数组或null,返回“object”(运算数是Number、String或Boolean这样的包装对象时,也返回“object”)

    若运算数是函数,返回“function”

    若运算数是未定义的,返回“undefined”。

    由此可见,typeof不能区别两种不同的对象类型,若要区别,须使用其他方法,如使用 instenceof 运算符或 constructor 属性(Object.constructor后面介绍)。

    (9)delete 运算符

    一元运算符,删除指定的对象的属性、数组元素或变量;删除成功则返回true,删除失败返回false。

    一些例子:

    <script type="text/javascript">
        n = 123;
        var p = { x: 1, y: 2 };
        document.write(delete n);   //true
        document.write(delete p.x); //true,删除对象p的属性x
        document.write(typeof p.x); //undefined,属性x已经被删除,不再存在
        document.write(delete p);   //false,var语句声明的变量不能被删除
        document.write(delete o);   //true, o不存在
        document.write(delete "a"); //true, ECMAScript标准规定,若delete的运算数不是属性、数组、或变量时,返回true
    </script>

    注意:delete影响的只是属性值,并不影响被这些属性引用的对象。

    var o = new Object();
    o.e1 = new Date();      //属性e1是对对象Date()的引用
    o.e2 = o.e1;            //属性e2也是对Date()的引用
    delete o.e1;            //只删除o的属性e1,对Date()对象没有任何影响。
    document.write(o.e2);   //e2属性此时仍然引用Date()对象

    (10)数组和对象的存取运算符——“[]”和“.”

    “.”要求左边运算数是一个对象,右边运算数是一个标识符(即对象的属性名或方法的直接量名)。若该对象中没有指定的属性,则返回undefined

    “[]”用于存取数组元素,也可用于存取对象的属性。

    注意:当“[]”用于关联数组时,由于属性名动态生成,所以不能使用运算符“.”,只能使用“[]”。

    例如在使用for/in遍历对象属性时,for(f in o){ document.write(o[f]);} ,不能使用o.f,此处f只是变量而不是o的标识符。

  • 相关阅读:
    20200311 1. 消息中间件概述
    20200311 0. RabbitMQ 安装
    20210309 java.lang.Integer
    20210304. Redis【归档】
    20210304. 8. Redis 大厂面试汇总
    20210304. 7. Redis 企业实战
    20210304. 6. Redis 高可用方案
    20210304. 5. Redis 扩展功能
    Evolution Strategies as a Scalable Alternative to Reinforcement Learning
    脉冲神经网络研究现状及展望——论文摘抄
  • 原文地址:https://www.cnblogs.com/gppblog/p/1644123.html
Copyright © 2011-2022 走看看