zoukankan      html  css  js  c++  java
  • javascript学习笔记——表达式和运算符

    表达式类别:

    原始表达式

    常量、变量和关键字,是表达式的最小单位。

    对象和数组的初始化表达式:

    [1+2,3+2]数组初始化表达式中还会有子表达式;{x:1,y:1}对象初始化表达式。

    函数定义表达式

    var a = function(){}

    属性访问表达式

    expression[expression]      expression.identifier两种形式。

    这种方式首先会计算[和.之前的expression,如果计算为null和undifined那么就会抛出类型错误异常。

    虽然identifier方法较为简单,但是只能使用在合格标识符中,并且要知道具体的属性名称。括号方法必须使用在保留字符或者含有标点符号或者数字中。

    调用表达式

    a(),里面可以传入参数

    对象创建表达式

    new a(),假如不传参数也可以不写括号。

    运算符:

    操作数个数、操作数类型、结果类型、运算符优先级、运算符结合性、运算顺序。

    算术表达式:

    “+”运算符

    在+运算符中,假如其中一个操作数有字符串,则另外一个操作数也会转换成字符串;假如一个操作数是对象,则会根据对象转换成原始值的方式进行转换(日期类型通过toString进行转换,其他通过valueOf进行转换,大部分对象没有valueOf方法,所以会通过toString方法进行转换),假如转换之类的类型是字符串,则会进行字符串相加方法;否则进行数组相加或者NaN。

    位运算符

    &  |   ~  ^  <<  >>  >>>

    一元运算符

    ++a    a++  --a  a--

    符号在变量前面则先进行操作符操作再赋值,符号在变量后面先赋值再进行操作符操作。

    关系表达式:

    等号和不等运算符

    ==    !=    ===    !==

    ==和!=比较的时候会进行一些类型的转换,假如比较的常量是不同类型的,那会先进行类型转换,假如一方是字符串另一方是数字,则会把字符串转换成数字进行比较;假如一方是布尔值一方是数字,则会把布尔值转换成数字进行比较,对象也是一样。最终都转换成数字进行比较,所以这是不严格的等号运算符。

    ===和!==是严格运算符,它不会进行类型的转换,不同类型那就不相等;两个引用比较要指向同一个对象才想等;两个null或者undifined进行比较不相等;NaN和任何数比较都不相等,和自身比较也不相等;两个字符串比较,16位数完全相等才相等,假如他们长度或者内容不同,则不相等。

    比较运算符

    <  >  <=  >= 

    在比较运算符中,只会比较数字和字符串,其它类型需要通过类型转换再来比较

    假如操作数中有一个操作数不是字符串,则两个操作数都要转换成数字进行比较

    字符串比较是通过字符数值来比较的,大写字母的数值小于小写字母

    比较运算符和加号运算符之间的区别是,比较运算符更青睐于数字,若有一个操作数不是字符串,则两个操作数都会转换成数字进行比较;而加号运算符更加青睐于字符串,若一个操作数是字符串,则两个操作数都会转换成字符串相加的,只有在两个操作数都是数字的情况下才会用数字加法。

    in运算符

    in运算符的作用是判断左值是否为右值的属性名

    string   in   object

    左值要是string类型,若不是则进行类型转换。

    instanceof

    instanceof是判断左值是否为右值的实例

    实例   instanceof    对象

    如果instanceof的左操作数不是一个对象的话返回false,假如右操作数不是一个函数的话会抛出类型错误的异常。

    逻辑运算符

    &&   ||    !

    null   undifined  ""   0  -0  NaN   false都是假值。

    在&&中,首先会运算左值,若是左边的表达式为false,那么直接返回左值,右值不会计算,若是左值为true,那么右值将会继续计算。

    在||中,首先会运算左值,若是左边的表达式为true,那么直接返回左值,右值不会继续计算,若是左值为false,那么继续计算右值。

    赋值表达式   =

    带操作的赋值表达式  =+  -=  *=  /=   %=    <<=    >>=   >>>=   &=   |=    ^=

    表达式计算

    eval() 在所调用的局部范围内可以进行获取,修改和定义局部变量

    eval() 全局变量,在全局中复制给一个全局变量,这个全局变量在局部变量中可以获取修改和定义全局变量,但是不能对局部变量进行读写和定义。

    其他运算符

    条件运算符   ?:

    条件判断?true:false

    typeof运算符

    判断左边的值是什么类型

    undifined    object    number   string   function   boolean  六种类型

    delete运算符

    delete可以删除对象属性和数组元素

    当数组元素被删除的时候,length不会变小,留下一个洞undifined,可以通过in运算符来查看属性是否还存在

    但是delete不可以删除内置核心对象和客户端属性,不可以删除通过var定义的变量以及用function来定义的函数和参数。

    在严格模式中delete是非法的,会抛出语法错误异常。

    void运算符

    逗号运算符

  • 相关阅读:
    测试 多线程 实现 callable 带返回值
    给定一个 hashMap 最终输出最大值的键
    正则判断输入的字符(英文、数字、空格、其他)的个数
    当返回值为json字符串时 如何获得其中的json数组
    thread run 和 start 的区别
    docker 构建dockerfile
    jsonp 跨域
    springsession 实现session 共享
    通过反射获得 spring 的 RequestMapping value值
    redis 集群搭建 以及 报错解决
  • 原文地址:https://www.cnblogs.com/claireyu1219/p/6245286.html
Copyright © 2011-2022 走看看