表达式:由运算符和运算元构成;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           删除成员;

js:语言精髓笔记2--表达式的更多相关文章

  1. js:语言精髓笔记9--函数式语言特征

    形式化运算系统的研究: 图灵:提出图灵机形式系统,通过0,1运算系统来解决复杂问题: 冯诺依曼:提出了冯诺依曼体系:即通过修改内存反映运算结果: 阿隆左.丘奇:提出新的运算范型Lambda演算,计算机 ...

  2. js:语言精髓笔记8--对象系统

    封装: 一把对象系统,封装是由语法解析来实现的,即语法作用域:但js是动态语言,因此只能依赖变量作用域: js的变量作用域只有表达式,函数,全局三种:所以js只能实现public和private两种封 ...

  3. js:语言精髓笔记12--动态语言特性(2)

    对于括号内: 通过赋值时发生的重写: (Object1 = function() {}).prototype.value = 100; var obj1 = new Object1; console. ...

  4. js:语言精髓笔记5----语言分类

    计算模型:源于对计算过程的不同认识: 1.基于不同计算模型一般分为://教科书的一般分类 命令式语言: 函数式语言: 逻辑式语言: 面向对象程序设计语言: 2.基于程序本质分类:  //编程的经典法则 ...

  5. js:语言精髓笔记1--标识符与基本类型

    标识符: 命名: 语法以及类型----语法关键字                                           //逻辑 值(的存储位置)----变量和常量           ...

  6. js:语言精髓笔记11--动态语言特性(1)

    语言:程序最终被表达为数据(结构)和逻辑(算法),命令式和说明式/函数式语言分别从这两方面分类: 动态:在语言陈述时无法确定,必须在计算机执行时才能确定语言关系:JS是完全动态语言,导致其不确定性一般 ...

  7. js:语言精髓笔记7----原型继承

    面向对象有三个基本特性:封装,继承,多态:如果都满足的话称为面向对象语言:而部分满足则称为基于对象语言: 数据类型实现模型描述: JavaScript对象模型: 构造过程:函数->构造器 构造器 ...

  8. js:语言精髓笔记6----作用域

    js基础语法:由语句.表达式和变量构成:   语句是主要表达方式:单语句->复合语句(代码块)->程序片段(函数):js中没有单元和程序的概念: 作用域: 语法作用域与变量作用域的区别:前 ...

  9. js:语言精髓笔记3----语句

    JS语句分类:(注意语句都是有返回值的) 声明语句: 变量声明语句: 标签声明语句: 函数声明语句: 表达式语句:(表达式加分号) 变量赋值语句:具有声明一个变量的隐式效果: 函数调用语句; 属性赋值 ...

随机推荐

  1. Commando War

    Commando War“Waiting for orders we held in the wood, word from the front never cameBy evening the so ...

  2. Integer Inquiry

    Integer Inquiry Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Sub ...

  3. 【Android代码片段之六】Toast工具类(实现带图片的Toast消息提示)

    转载请注明出处,原文网址:http://blog.csdn.net/m_changgong/article/details/6841266  作者:张燕广 实现的Toast工具类ToastUtil封装 ...

  4. Unity3d iOS基本优化和高级优化

    原地址:http://www.cocoachina.com/bbs/read.php?tid=70395&page=1 分享看见的2篇好文.简单翻译了一下并且放出原文 http://www.c ...

  5. js判断元素是否隐藏的方法

    代码如下: JavaScript代码如下: if( document.getElementById("div").css("display")==='none' ...

  6. [ruby on rails] 跟我学之(4)路由映射

    前面<[ruby on rails] 跟我学之Hello World>提到,路由对应的文件是 config/routes.rb 实际上我们只是添加了一句代码: resources :pos ...

  7. ZJOI 游记

    在备战YZ提前招生考时去ZJOI玩了趟,ZJ果然人才辈出= =神犇讲课各种神听不懂啊orz day 0 Mon. 上午在AB班愉快地玩耍,下午就去HZ了. HZ真热啊... 学军也是节约= =空调都不 ...

  8. CSS3.0盒模型display:-webkit-box;的使用

    box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构.css实现的布局方式.经典   的一个布局应用就是布局的垂直等高.水平均分.按比例划分. 目前box-flex属性还没 ...

  9. Android mtk单路录音问题

    在单路录音中,有两种情况导致底层录音资源被占用的问题: 1 开启vmLog后,拨打一个电话,挂断电话.如果挂断电话后,没有关闭vmlog进程,则会导致其它AP 无法得到底层的录音资源,从而无法录音. ...

  10. 【SpringMVC】SpringMVC系列14之SpringMVC国际化

    14.SpringMVC国际化 14.1.概述 14.2.用户切换选择语言