【慕课网】JavaScript表达式和运算符

1.表达式

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

1.原始表达式 
	1,常量,直接量 3,14 "test"
	2,关键字 null this true 
	3,变量 i,j,k

2.复合表达式(通过原始表达式和运算符)
	10*20

3.数组,对象的初始化表达式
	[1,2,3]
	[1, ,,4]
	{x:1,y:2}

3.函数表达式
	var a=function(){};
	(function(){console.log("hello world")})();//立即调用

4.属性访问表达式
	var o={x:1};
	o.x
	o["x"]

5.调用表达式
	fun();

6.对象创建表达式
	new Func(1,2);
	new Object;

2.运算符

运算符:
一元:++ –
二元:+ - * /=
三元:c?a : b

普通运算符:赋值、比较、位、逻辑、字符串拼接、算术
特殊运算符:条件运算符、逗号运算符、delete、in、instanceof、new、this、typeof、void

,运算符:

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

,操作符就是从左到右依次计算表达式,最后返回最右边的操作数。所以这里(1, 2, 3)返回3.

delete运算符:

var obj = {x:1};
obj.x   //1
delete obj.x;
obj.x;   //undefined

in运算符:

window.x = 1;
'x' in window;   /true

instanceof、typeof运算符:

{} instance Object   //true
typeof 100 === "number"   //true

注意:

{} instanceof Object   //语法错误

//下面这样写才行
var x={};
x instanceof  Object;   //true

因为解析的原因。如果直接以{}开头会直接被误认为是一个块语句而不是一个空对象。那么instanceof的左操作数就不对了。所以才有语法错误。类似的如果直接用function(){}也是不行的因为会被解析成函数声明。不过就算不先定义给他们加个括号也可以解决了。因为括号里先计算了语法上就解释通了。

function(){} instanceof Object   //语法错误

(function(){}) instanceof Object   //true
a=function(){}
a instanceof Object //true

new运算符:

function Foo(){}
Foo.prototype.x = 1;
var obj = new Foo();
obj.x;   //1
//是对象上还是对象原型链上的
obj.hasOwnProperty('x');   //false
obj._proto_.hasOwnProperty('x');   //true 

new运算符原型链中问题进一步可以查看:https://www.imooc.com/qadetail/66320

this运算符:

this;   //window(浏览器)
var obj  = {
	func:function(){return this};
}
obj.func();   //obj

this应该算是表达式,this是JS解释器生成的一个值。

void运算符:

//void 是一个运算符,无论后面的是什么都返回undefined
void 0   //undefined
void (0)   //undefined

运算符优先级:

在这里插入图片描述


+!{}[true] //1

在此页 按F12,在console输入“+!{}”、“+”、“+!”结果都是0;“+!{}[true]”、“+!{}[1]”、“+[1]”、“+!{}[false]”结果都是1."!{}"是false,“!{}[true]”是true,“+!{}[true]”相当于“+true”结果是1.

我认为这个表达式的求值过程分解如下:(1){}[true];//undefined (2)!{}[true];//true (3)+!{}[true];//1。

!{}得到的是false,+是用来转换为数字的,false为0,[]数组内只要不为空都为true,所以结果为1。

后面会写一篇关于这方面介绍文章。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值