表达式是一种JS短语,可使JS解释器用来产生一个值。

一、表达式

表达式分类

1、原始表达式

常量、直接量 (3.14,"test");

关键字 (null,this,true);

变量(i,k,j);

都属于原始表达式。

原始表达式和原始表达式可以复合成复合表达式,比如10*20;

2、初始化表达式

数组、对象的初始化表达式

比如[1,2] 相当于new Array(1,2);

[1,,,4] 相当于[1,undefined,undefined,4]

{x:1,y:2}相当于 var o=new Object();o.x=1;o.y=2;

3、函数表达式

把函数赋值给一个变量:var fe=function(){};

把函数括起来直接调用:(function(){console.log('hello world');})();

4、属性访问表达式

var o={x:1};

o.x或者o['x']访问对象的属性叫属性访问表达式

5、调用表达式

函数名加上括号func()就是调用表达式。

6、对象创建表达式

new Func(1,2);

没有参数可以把括号直接省略new Object,表示创建一个空对象。

二、运算符

分类,安装操作数个数分类:

按功能分类:

展开介绍特殊运算符。

1、?:条件运算符

var val=true?1:2;     //val值为1

2、,逗号运算符

很少见。

var val=(1,2,3);    //val值为3

逗号表达式会从左到右依次计算表达式的值,最后会取最右边的值。

用逗号隔开表示每个表达式都会被计算,最终整个表达式的结果会取最右边的。

3、delete运算符【update20170506】

用来删除对象上的属性,比如delete obj.x;

从IE9开始有一个Object.defineProperty()方法可以设置一个configurable标签,并不是对象上的所有属性都可以被成功delete掉,configurable为true才能正常被delete。

delete运算符不能删除变量,不能删除参数,用来删除对象上configurable为true的属性

用var 声明的变量,挂在变量对象上,不能用delete删除
隐式声明的变量,相当于是Global对象的属性,可以用delete 删除

4、in运算符

判断对象里是否有key

in运算符要求第1个(左边的)操作数必须是字符串类型或可以转换为字符串类型的其他类型,而第2个(右边的)操作数必须是数组或对象。

5、instanceof,typeof运算符

new Object() instanceof Object  //true
typeof 100 === 'number' //true

instanceof基于原型链判断对象的类型

typeof返回字符串,用于原始类型或者函数。

6、new运算符

new创建构造器的一个实例。

7、this运算符

this在不同情况有不同值

8、void运算符

void是一元运算符,不管后面操作数是多少都会返回undefined.

9、运算符优先级

下面的表将所有运算符按照优先级的不同从高到低排列。参考MDN

优先级 运算类型 关联性 运算符
19 圆括号 n/a ( … )
18 成员访问 从左到右 … . …
需计算的成员访问 从左到右 … [ … ]
new (带参数列表) n/a new … ( … )
17 函数调用 从左到右 … ( … )
new (无参数列表) 从右到左 new …
16 后置递增(运算符在后) n/a … ++
后置递减(运算符在后) n/a … --
15 逻辑非 从右到左 ! …
按位非 从右到左 ~ …
一元加法 从右到左 + …
一元减法 从右到左 - …
前置递增 从右到左 ++ …
前置递减 从右到左 -- …
typeof 从右到左 typeof …
void 从右到左 void …
delete 从右到左 delete …
14 乘法 从左到右 … * …
除法 从左到右 … / …
取模 从左到右 … % …
13 加法 从左到右 … + …
减法 从左到右 … - …
12 按位左移 从左到右 … << …
按位右移 从左到右 … >> …
无符号右移 从左到右 … >>> …
11 小于 从左到右 … < …
小于等于 从左到右 … <= …
大于 从左到右 … > …
大于等于 从左到右 … >= …
in 从左到右 … in …
instanceof 从左到右 … instanceof …
10 等号 从左到右 … == …
非等号 从左到右 … != …
全等号 从左到右 … === …
非全等号 从左到右 … !== …
9 按位与 从左到右 … & …
8 按位异或 从左到右 … ^ …
7 按位或 从左到右 … | …
6 逻辑与 从左到右 … && …
5 逻辑或 从左到右 … || …
4 条件运算符 从右到左 … ? … : …
3 赋值 从右到左 … = …
… += …
… -= …
… *= …
… /= …
… %= …
… <<= …
… >>= …
… >>>= …
… &= …
… ^= …
… |= …
2 yield 从右到左 yield …
yield* 从右到左 yield* …
1 展开运算符 n/a ... …
0 逗号 从左到右 … , …

可以看出!比instanceof优先级高。所以不能写!arr instanceof Array 要用括号括起来!(arr instanceof Array)。

点(.)运算符优先级》new带参数》函数调用()。

new Foo.getName();      //相当于new (Foo.getName)()
new Foo().getName(); //相当于(new Foo()).getName()
new new Foo().getName(); //相当于new ((new (Foo()).getName)()

new Foo().getName();

中成员访问点运算符优先级是最高的,因此先执行了.getName(),重点是在进行左侧取值的时候,

new Foo()可以理解为两种运算

  • new 带参数,即new Foo()
  • 函数调用先Foo()取值后再new

而new带参数的优先级高于函数调用,因此先执行了new Foo()得到Foo的实例对象再进行成员访问.getName。

参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Logical_Operators

本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/6370906.html有问题欢迎与我讨论,共同进步。

javascript 表达式和运算符 (二)的更多相关文章

  1. 第四章:Javascript表达式和运算符

    表达式是javascript中的一个短语,javascript解释器会将其计算出一个结果.程序中常用量是最简单的一类表达式就是变量.变量名也是一种简单的表达式,它的值就是赋值给变量的值.复杂的表达式是 ...

  2. JavaScript表达式和运算符 —— 基础语法(4)

    JavaScript基础语法(4) 运算符 运算符用于将一 个或者多个值变成结果值. 使用运算符的值称为操作数,运算符和操作数的组合称为表达式 JS中的运算符可以分成下面几类: 算术运算符 逻辑运算符 ...

  3. Javascript 表达式和运算符

    属性访问表达式: var o = {x:1, y:{z:3}};//示例对象 var a = [o, 4, [5,6]];//包含对象的数组 console.log(o["x"]) ...

  4. javaScript基础-02 javascript表达式和运算符

    一.原始表达式 原始表达式是表达式的最小单位,不再包含其他表达式,包含常量,直接量,关键字和变量. 二.对象和数组的初始化表达式 对象和数组初始化表达式实际上是一个新创建的对象和数组. 三.函数表达式 ...

  5. Javascript权威指南——第二章词法结构,第三章类型、值和变量,第四章表达式和运算符,第五章语句

    第二章 词法结构 一.HTML并不区分大小写(尽管XHTML区分大小写),而javascript区分大小写:在HTML中,这些标签和属性名可以使用大写也可以使用小写,而在javascript中必须小写 ...

  6. JavaScript深入浅出补充——(一)数据类型,表达式和运算符

    项目基本做完,在进行下一阶段学习之前先看视频学习回顾一下JavaScript 一.数据类型 JavaScript中有五种原始类型和一种对象类型 JavaScript弱类型语言中隐式转换 num-0 字 ...

  7. Javascript学习2 - Javascript中的表达式和运算符

    原文:Javascript学习2 - Javascript中的表达式和运算符 Javascript中的运算符与C/C++中的运算符相似,但有几处不同的地方,相对于C/C++,也增加了几个不同的运算符, ...

  8. 笔记《JavaScript 权威指南》(第6版) 分条知识点概要3—表达式和运算符

    [表达式和运算符]原始表达式,初始化表达式(对象和数组的),函数定义表达式,属性访问表达式,调用表达式,对象创建表达式,运算符概述,算术表达式,关系表达式,逻辑表达式,赋值表达式,表达式计算,其他运算 ...

  9. Python基础0:变量 赋值 表达式和运算符

    变量: 前面我们在使用print()输出内容的时候,如果内容很长,后面要再次输出的时候,就需重新在输入一遍. 如果给输出的内容起个简单的别名.这样我们用简短的别名来代替长内容,下次要输出的时候就直接使 ...

随机推荐

  1. 移植python笔记

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 编译环境:ubuntu-14.04.1 编译器:gcc.arm-hisiv200-linux-gnueabi P ...

  2. Tomcat+Eclipse乱码问题解决方法

    概述 乱码问题是大家在日常开发过程中经常会遇到的问题,由于各自环境的不同,解决起来也费时费力,本文主要介绍一般性乱码问题的解决方法与步骤,开发工具采用Eclipse+Tomcat,统一设置项目编码UT ...

  3. webpack学习笔记(二)-- 初学者常见问题及解决方法

    这篇文章是webpack学习第二篇,主要罗列了本人在实际操作中遇到的一些问题及其解决方法,仅供参考,欢迎提出不同意见. 注:本文假设读者已有webpack方面相关知识,故文中涉及到的专有名词不做另外解 ...

  4. Java中static的特点

    前两天面试时被问到静态的特点,当时回答地不是很好,现在来总结一下 在了解某样东西的时候我们通常会从它是什么,为什么,和怎么样在三方面来衡量,对于java中的static,我们也这样讨论下,要明确以下几 ...

  5. MSDN官方数据库开发群

    QQ群1:43563009 创建人:中国风(Roy_88) 创建时间:2007-07-21 当前人数:326人 QQ群2:27156079 创建人: fcuandy 创建时间:2008-03-20 当 ...

  6. Linux中的sed命令

    sed - stream editor for filtering and transforming text 流编辑器的过滤和转换文本 sed [-nerf] [动作] 参数: -i 修改源文件 危 ...

  7. css中的inline-block

    div { display: inline-block; *display: inline; *zoom: 1; } Basic Support包含值:none | inline | block | ...

  8. Zkdash安装

    zkdash是一个zookeeper的管理界面,也可以作为任何基于zookeeper的配置管理工具,比如:Qconf 1.拉取代码 #git clone https://github.com/irea ...

  9. java如何停止一个运行的线程?

    关于线程的一点心得 //首先导入需要的包 improt java.util.Timer;import java.io.File;import java.util.TimerTask; //首先需要创建 ...

  10. 简单易用的.NET免费开源RabbitMQ操作组件EasyNetQ解析

    对于目前大多的.NET项目,其实使用的技术栈都是差不多,估计现在很少用控件开发项目的了,毕竟一大堆问题.对.NET的项目,目前比较适合的架构ASP.NET MVC,ASP.NET WebAPI,ORM ...