表达式:由运算符和运算元构成;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. 基础知识系列☞Abstract和Virtual→及相关知识

    转载地址→http://www.cnblogs.com/blsong/archive/2010/08/12/1798064.html 在C#的学习中,容易混淆virtual方法和abstract方法的 ...

  2. HDOJ 3555 Bomb

    数位DP的DFS写法.... Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Oth ...

  3. setVolumeControlStream(int streamType)

    Android中有如下几种音频流: AudioManager.STREAM_MUSIC  /** The audio stream for music playback */ AudioManager ...

  4. The content of element type "package" must match "(result-types?,interceptors?...

    错误:“The content of element type "package" must match "(result-types?,interceptors?,de ...

  5. 2015安徽省赛 C.LU的困惑

    题目描述 Master LU 非常喜欢数学,现在有个问题:在二维空间上一共有n个点,LU每连接两个点,就会确定一条直线,对应有一个斜率.现在LU把平面内所有点中任意两点连线,得到的斜率放入一个集合中( ...

  6. poj1611(感染病患者)

    The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 24587   Accepted: 12046 De ...

  7. 【OpenStack】OpenStack系列1之OpenStack本地开发环境搭建&&向社区贡献代码

    加入OpenStack社区 https://launchpad.net/,注册用户(597092663@qq.com/Admin@123) 修改个人信息,配置SSH keys.OpenPGP keys ...

  8. JQuery $.ajax()方法详解

    jQuery Ajax 参考手册 实例 通过 AJAX 加载一段文本: jQuery 代码: $(document).ready(function(){ $("#b01").cli ...

  9. 基础知识《五》---Java多线程的常见陷阱

    1.在构造函数中启动线程 我在很多代码中都看到这样的问题,在构造函数中启动一个线程,类似这样: public class A{ public A(){ this.x=1; this.y=2; this ...

  10. 面向侧面的程序设计AOP-------《一》概述

    Aspect-Oriented Programming(面向方面编程,AOP)正好可以解决这一问题.它允许开发者动态地修改静态的OO模型,构造出一个能够不断增长以满足新增需求的系统,就象现实世界中的对 ...