表达式:由运算符和运算元构成;JS中没有运算符的表达式称为单值表达式;没有运算元,孤立与代码上下文的运算符是不符合语法的;(表达式是有返回值的)

单值表达式:

  • this引用;
  • 变量引用;
  • 直接量:
    • null
    • undefined
    • 字符串
    • 布尔值
    • 数值
    • 正则表达式

基本表达式:

  • 单值表达式
  • 数组初始器:[]
  • 对象初始器:{}
  • 表达式分组运算:()

 运算符按结果值的分类:

  • 一般表达式运算:(会强制类型转换)

    • 数值运算                                                                                            //运算元:number ; 目标类型: number;
    • 位运算                                                                                               //运算元:number ; 目标类型: number;
    • 布尔值运算(! && ||)                                                                          //运算元:boolean; 目标类型: boolean;
  • 值逻辑运算:(将运算元理解为布尔值,但不强制类型转换)(&& ||)                       //运算元: 运算元 ;  目标类型: 运算元;
  • 字符串运算
    • 字符串连接:效果与concat()相同;                                                          //运算元:string; 目标类型: string;
  • 等值运算:(三种值类型中对字符串检测开销很大)                                           //运算元:*; 目标类型: boolean;
  • 赋值运算:

    • 一般赋值;                                                                                         //运算元:*; 目标类型: *;
    • 复合赋值;(除了 += 之外都不可对字符串运算)                                         //运算元:*; 目标类型: *;

    函数调用:使用小括号,传参并执行;                                                               //运算元:function; 目标类型: *;

    • 一般function函数调用;
    • Function类创建的函数对象调用;
  • 对象:创建,存取,检查等;                                                                          //运算元:object; 目标类型: *;
  • 其他

序列检测(等值运算中):

  • 可比较序列的类型:boolean,string,number(任何值与nan比较返回false的原因正是因为其没有序列值)
  • 检测规则:(按数值比较优先原则)
    • 两个值类型比较:比较序列中大小;
    • 引用类型与值类型比较:引用类型转化为相同类型的值类型数据后比较;
    • 两个引用类型比较:无意义,总是返回false;因为找不到序列;

赋值运算:赋值的效果就是修改存储单元中的值;

    • 语法上“100 = 10”这样赋值是成立的,但执行的时候会因左侧的的运算元是直接量,其存储单元不可写而导致错误;
    • 特例:由于值类型的字符串是一个不确定长度的连续数据块,赋值开销大,所以JS中字符串赋值为字符串的地址引用;所以产生

      • 不能直接修改字符串字符;
      • 字符串连接运算会产生新的字符串;
      • 修改length无意义;

 特殊运算符:

  • 不直接产生运算效果而是影响运算效果:

    • void    使表达式总是返回undefined;
    • ? :
    • ()        调整运算次序,优先级运算
    • ,        表达式顺序地连续执行
  • 不直接针对变量的值运算而是针对变量运算:
    • typeof           并不访问变量的值,而是取值的类型信息;所以对未定义的变量使用也不会报错;
    • instanceof      返回继承关系;
    • in                 返回成员关系;
    • delete           删除成员;

最新文章

  1. 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)
  2. C++常用特性原理解析
  3. Linux(Ubuntu 14.04) setting up OpenGL
  4. centos6.7 安装Docker
  5. ci实现RBAC,详细解释原理和核心代码显示
  6. SQL.变量、运算符、if、while
  7. “我爱淘”冲刺阶段Scrum站立会议2
  8. 更改cmd代码页,修正语言显示
  9. DbProviderFactories.GetFactory Oracle.ManagedDataAccess.Client
  10. asp.net mvc CodeFirst模式数据库迁移步骤
  11. 在ARC下,assign和weak的区别
  12. 手把手图文教你从Eclipse项目迁移Android Studio
  13. Java的几种设计模式
  14. spring Boot异步操作报错误: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.self.spring.springboot.Jeep' available
  15. mysql加速source导入数据
  16. 【ASP.Net】publish asp.net to local IIS
  17. linux文件管理之解压缩
  18. couchdb
  19. cplusplus 库 在线管理; 类似于 python的 pip install 、nodejs 的npm模块
  20. windows live writer backup

热门文章

  1. jQuery.isEmptyObject() 函数详解
  2. Truck History(prim & mst)
  3. (11)UI布局和分辨率适配
  4. undefined与null的区别
  5. ios 百度地图api 入门
  6. Python strip、lstrip和rstrip的用法
  7. 【云计算】Docker删除名称为none的Image镜像
  8. 《ASP.NET MVC4 WEB编程》学习笔记------Web API
  9. js ==与===区别(两个等号与三个等号)
  10. iOS 推荐一个下载用的第三方库