javascript基础语法,表明式和平运动算符

this关键字和标记符

原本表明式(primary exression)

  原始表明式是表明式的矮小单位——它不再包涵别的表达式

  原始表明式分为字面量、关键字和变量;详细来讲包蕴this关键字、标识符引用、字面量援引、数组起先化、对象开头化和分组表明式

PrimaryExpression : 
this 
Identifier 
Literal 
ArrayLiteral 
ObjectLiteral 
( Expression )

this关键字和标志符

this;//返回当前对象
i;//返回变量i的值
sum;//返回变量sum的值

字面量

  字面量(literal),又翻译成直接量,就是程序中央政府机关接行使的数据值

 Literal ::
   NullLiteral
   BooleanLiteral
   NumericLiteral
   StringLiteral 
   RegularExpressionLiteral

null;
undefined;
true;
false;
1;
'abc';
/pattern/;

数组和对象起先化

  数组开头化和对象起首化实际上是叁个以字面量的方法呈报的初阶化的历程。那多个初步化表达式不经常称做”对象字面量”和”数组字面量”

[];
[1,2,3];
{};
{a:1};

分组表明式

  分组表明式实际上正是括号,用于重写运算符的优先级

 

typeof

typeof也是二个运算符!

分组表明式

参照他事他说加以考察资料

【1】 ES5/表达式
【2】《javascript权威指南(第6版)》第4章 表达式和平运动算符
【3】《javascript语言美丽(修订版)》第2章 语法

 

delete

delete: 没想到吧, 我也是运算符~

  • 删除属性恐怕去除数组成分不只有是安装多个undefined的值,实际这几个个性将不再存在。
  • 读取八个不设有的习性将回来undefined
  • 客户var语句申明的变量不能够去除
  • 透过function语句定义的函数和函数参数也不可能被删去

var o={x:1,y:2};
delete o.x;//true
typeof o.x;//undefined
delete o.x;//true
delete o;//false, var定义的变量无法删除
delete 1;//...闹哪样?
this.x=1;//重新赋值,注意没有var
delete x;//非严格模式下返回true
//严格模式下会抛出异常,应该用delete this.x代替
x;//运行错误

品质访问表达式

眼下的话

  一般地,关于javascript基础语法,大家听得相当多的术语是操作符和言辞。然则,其实还会有贰个术语平时利用,却比相当少被波及,那正是javascript表明式(expression)。本文将详细介绍javascript表达式,表达式分为原始表明式和错综相连表明式

 

正文最早公布于http://szhshp.org/tech/2017/02/18/JavaSprite.html
转发请评释

function square(x){
return x*x;
} 

复杂表明式(MemberExpression)

  复杂表明式由原有表达式和操作符(operator)组合而成,包涵属性访谈表明式、对象创设表明式和函数表达式

MemberExpression : 
MemberExpression [ Expression ] 
MemberExpression . IdentifierName 
new MemberExpression Arguments
FunctionExpression 

个性访谈表明式

  属性访谈表达式运算能够获得三个对象属性或四个数组成分的值,javascript为属性访谈定义了三种语法

MemberExpression . IdentifierName 
MemberExpression [ Expression ] 

  第一种写法是一个表明式后紧跟着三个句点和标记符。表明式内定对象,标记符则钦点须要拜候的习性的名称

  第三种写法是接纳方括号,方括号内是别的二个表明式(这种办法适用于对象和数组)。第贰个表达式钦定要寻访的属性的名目或代表要拜见数组成分的目录

var o = {x:1,y:{z:3}}; //对象字面量
var a = [o,4,[5,6]]; // 包含对象的数组字面量
o.x;//表达式o的x属性
o.y.z;//表达式o.y的z属性
o['x'];//对象o的x属性
a[1];//表达式a中索引为1的元素

  不管选择哪个种类情势的性格访谈表明式,在’.’和'[‘此前的表明式总是会首先总括

  如若总括结果是null或undefined,表明式会抛出三个门类错误特别,因为这七个值都不能够包罗大肆属性

  假若总计结果不是目的,javascript会将其转移为目的

  假设指标表明式后跟随句点和标记符,则会招来由这么些标记符钦点的属性值,并将其用作整个表明式的值重回

  要是目的表明式后跟随一对方括号,则会精打细算方括号内的表明式的值并将其改动为字符串

  不论哪类状态,若是命名的属性不真实,那么万事属性访谈表明式的值便是undefined

目的创立表明式

  对象创制表明式创设三个对象并调用一个函数早先化新目的的习性

new Object();
new Point(2,3);

  若是三个对象创制表明式无需传入任何参数给构造函数的话,那么那对空圆括号是足以省略的

new Object;

函数表明式

  函数表达式分为函数定义表明式和函数调用表明式

  函数定义表明式定义八个javascript函数,表明式的值是那些新定义的函数

  贰个天下第一的函数定义表明式包蕴关键字function,跟随其后的是一对圆括号,括号内是三个以逗号分割的列表,列表含有0个或四个标志符(参数名),然后再尾随二个由花括号包裹的javascript代码段(函数体)

function square(x){
    return x*x;
}

  函数定义表明式同样能够包蕴函数的名字,函数也足以透过函数语句来定义,并不是函数表明式

var square = function(x){return x*x;}

  函数调用表达式是一种调用或实施函数或格局的语法表示。假设那几个表明式是贰天性质访谈表达式,那么这么些调用称做方法调用

f(0);
Math.max(x,y,z);
a.sort();

 

相当于和不等运算符

==运算符用于检测八个操作数是还是不是等于,这里的可比很宽松因为允许了类型转变,检查实验室会通过如下逻辑:

  1. 若是一个值是null另二个是undefined,则相等
  2. 借使一个是数字三个是字符串,字符串转为数字再相比
  3. 如果是true则转变来1,false转换成0
  4. 一经二个值是指标另二个是数字或字符串,对象则转换来原始值(仿照效法上文逻辑,注意日期类的例外情形)

===的检查测量试验就对比严苛,会经过如下逻辑:

  1. 假诺八个值类型区别,则不等于
  2. 假定三个值都以null/undefined,则不等于
  3. 比如三个值都以布尔值true要么都是布尔值false,则相等
  4. 一经二个是NaN依然都是NaN,则不对等(NaN与别的值都不对等)
  5. 借使都以数字还要值格外,则相当于
  6. 假诺都以字符串何况对应十四位值一样,则特别
  7. 比方三个援用值指向同二个目的,则也就是

固有表达式(primary exression)

土生土养表明式

原本表明式分为三种:

  1. 直接量

1.23       //数字直接量
"hello"    //字符串直接量
/pattern/  //正则表达式直接量
  1. 保留字

true  //返回一个布尔值:真
false //返回一个布尔值:假
null  //返回一个值:空
this  //返回“当前”对象
  1. 变量

i         //返回变量i的值
sum       //返回sum的值
undefined //undefined是全局变量,和null不同,它不是一个关键字

javascript代码段(函数体)

递增/递减运算符

先来看段代码

var a=1; 
a++;//输出2

var a="1"; 
a++;//输出2,首先将1转换为数字然后自增

var a="abc"; 
a++;//输出Nan,因为abc无法转换为数字

"a"+1; //输出a1
"a"++; //Uncaught ReferenceError: Invalid left-hand side expression in postfix operation,因为左操作数无法转换为数字
  • 递增“++”运算符对其操作数实行增量(+1)的操作,操作数是三个左值(变量、数组元素只怕指标属性)。
  • 运算符将操作数调换为数字。
  • 然后给数字加1,并将加1后的数值重新赋值给变量,数组成分或许目的属性。
PrimaryExpression : 
this 
Identifier 
Literal 
ArrayLiteral 
ObjectLiteral 
( Expression ) 

+运算符

  • 假如二个操作数是指标:
    则对象会根据对象到原始值的转变准绳为原始类值。
    日期对象toString()艺术实行调换,其余对象假诺valueOf()方法再次回到叁个原始值的话,则经过valueOf()措施实行调换。
    鉴于超越八分之四指标都不具有可用的valueOf()主意,因而他们会通过toString()艺术来实施抓换
  • 在进展了对象到原始值的调换后,借使中间叁个操作鼠是字符串的话,另叁个操作数也会转移为字符串。然后实行字符串连接。
  • 要不,多少个操作数都将退换为数字(可能NaN),然后实行加法操作。

小结归纳:

  1. 假假如日期那么就应用toString()
  2. 即使不是日期那么看看valueOf()是不是再次来到贰个原始值
  • 假诺能够,那么就利用这些原始值
  • 比如这几个或然当前目的的valueOf()不可用,那么就应用toString()
  1. 上述运算之后
  • 要是贰个操作数是字符串,另四个操作数也会转为字符串
  • 假使未有字符串加入运算,那么就将操作数调换为数字然后开展加法操作.这儿非法的数字都会转成NaN

1 + 2 //=>3 加法
"1" + "2" //=>"12" 字符串连接
"1" + 2 //=>"12"数字转换为字符串后进行字符串连接
1 + {} //=>"1[object object]":对象转换为字符串后进行字符串连接
true + true //=>2 布尔值转换为数字后做加法
2 + null //=>2 null转换为0后做加法
2 + undefined //=>NaN undefined转换为NaN做加法 

就此,加法符号类型混用时索要留神其事先级:

1 + 2 + "bmice" //=> "3 bmice"
1 + (2 + "bmice") => "12bmice"
MemberExpression . IdentifierName 
MemberExpression [ Expression ] 

正如运算符

带有种种>,<,>=,<=等相比较运算符的演算逻辑:

  1. 若是操作数为目的,调换来原始值
  2. 转移后如若都以字符串那么根据字母表顺序比较
  3. 转移后只要至少贰个不是字符串,那么多少个都转为数字举行相比
  4. 倘使转变后多少个值是NaN那么势必再次来到false

  函数定义表明式同样能够包含函数的名字,函数也能够通过函数语句来定义,实际不是函数表明式

指标成立表达式

目的创建表达式(object creation
expression)创制贰个目的并调用构造函数来最初化对象的属性。对象创造表明式和函数调用表达式特别类似,只是对象创造表明式从前多了三个主要字new:

new Object()
new Point(2,3)

一旦目的创制表达式没有供给传入任何参数给构造函数的话,那么那对圆括号是足以省略掉的

new Object
new Point
new Object();
new Point(2,3); 

调用表达式

调用表达式以多个函数表明式早先,那几个函数表明式指代了要调用的函数。函数表明式后跟随一对圆括号,括号内是三个以逗号隔绝的参数列表,如:

f(0)                    //f是一个函数表达式;0是一个参数表达式
Math.max(x,y,z)  //Math.max是一个函数;x,y和z是参数
a.sort()               //a.sort是一个函数,它没有参数
  • 当对调用表明式实行求值的时候,先计算函数表明式,然后计算参数表明式,获得一组参数值。
  • 假若函数表明式的值不是一个可调用的指标,则抛出一个体系错误极度。
  • 接下来实参的值被每一个赋值给形参,这一个形参是概念函数时钦赐的,接下去发轫施行函数体。要是函数使用return语句给出二个重临值,那么这一个重返值正是一体调用表明式的值。不然,调用说明式的值就是undefined
  • 别的贰个调用表明式都包括一对圆括号和左圆括号在此之前的表明式。
  • 倘若这几个表达式是多特品质访谈表达式,那么这一个调用称作方法调用。在情势调用中,试行函数体的时候,作为品质访谈主体的对象和数组正是其调用方法内this的对准。

那部分this的汇报很模糊,但是前边会有详实的牵线

var o = {x:1,y:{z:3}}; //对象字面量
var a = [o,4,[5,6]]; // 包含对象的数组字面量
o.x;//表达式o的x属性
o.y.z;//表达式o.y的z属性
o['x'];//对象o的x属性
a[1];//表达式a中索引为1的元素 

运算符概述

  属性访问表明式运算能够得到三个对象属性或二个数组成分的值,javascript为属性访谈定义了三种语法

提到表达式

i;//再次来到变量i的值

目的和数组的开首化表明式

指标和数组伊始化表达式实际上是贰个创制新的靶子和数组。

因为数组本人就是多个目的

[]         //一个空数组:[]内留空即表示该数组没有任何元素
[1+2,3+4]  //拥有两个元素的数组,第一个是3,第二个是7

var matrix =[[1,2,3],[4,5,6],[7,8,9]];//数组的初始化可以嵌套

var a = new Array(1,2,3)
a = [1,2,3]


var a = new Array(1,,2,3)//报错
a = [1,,2,3]//index=1的元素是undefined

var a = new Array(10)//创建一个长度为10的数组并且值全部为undefined
a = [10]//创建了一个长度为1的数组并且值为10

  假如多个对象创造表明式无需传入任何参数给构造函数的话,那么那对空圆括号是足以大约的

表明式和平运动算符

  字面量(literal),又翻译成直接量,正是前后相继中向来运用的数据值

品质访问表达式

三个卓绝的函数定义表明式包罗关键字function,跟随其后的是一对圆括号,括号内是八个以逗号分隔的列表,列表含有0个或多少个标记符(参数名),然后再尾随四个由花括号包裹的JS代码段(函数体),如:

var o = {x:1,y:{z:3}}; //一个示例对象
var a = [o,4,[5,6]];   //一个包含这个对象的示例数组
o.x                    //=>1:表达式o的x属性
o.y.z                  //=>3:表达式o.y的z属性
o["x"]                 //=>1:对象o的x属性
a[1]                   //=>4:表达式a中索引为1的元素
a[2]["1"]              //=>6:表达式a[2]中索引为1的元素
a[1+1][0+1]            //=>6:表达式a[2]中索引为1的元素,大括号里的数据运算后并且转换为了字符串
a[0].x                 //1:表达式a[0]的x属性

连锁运算逻辑:

  • 无论用哪类形式的质量访谈表达式,在”.”和“[”从前的表明式总是会首先总括。
  • 假使计算结果是null或者undefined,表明式会抛出七个系列错误非常,因为那三个值都不可能包蕴自便属性。
  • 只要运算结果不是目的(可能数组),JS会将其更动为对象。
  • 若是目的表明式后跟随句点和标记符,则会搜索有这几个标志符所内定的特性的值,并将其看成任何表明式的值再次来到。
  • 若是指标表明式后跟随一对方括号,则会图谋方括号内的表达式的值并将它调换为字符串。(注意是持筹握算方括号内部的表明式的值而且转换为字符串)
  • 任凭哪一类状态,倘义务名的质量不设有,那么万事属性访谈表明式的值就是undefined

若是属性名称是四个保留字只怕隐含空格和标识点符号,或是四个数字(对于数组来讲),则必需使用方括号的写法。
当属性名是经过运算得出的实际不是固定值的时候,那时必需使用方括号写法。

本文将详细介绍javascript表达式,表明式分为原始表明式和复杂性表明式。一般,关于javascript基础语法,大家听得比相当多的术语是操作符和言辞。但,其实还会有多个术语常常利用,却很少被提到,那正是javascript表明式(expression)。

  假如指标表明式后紧跟着一对方括号,则会总括方括号内的表明式的值并将其转移为字符串

this;//再次来到当前目的

  如若计算结果是null或undefined,表达式会抛出七个档案的次序错误极其,因为那多少个值都不可能满含任性属性

  二个第一名的函数定义表达式富含关键字function,跟随其后的是一对圆括号,括号内是三个以逗号分割的列表,列表含有0个或多个标记符(参数名),然后再尾随贰个由花括号包裹的

  不管采用哪类样式的质量访问表达式,在’.’和'[‘以前的表明式总是会率先总计

  函数定义表明式定义多个javascript函数,表明式的值是其一新定义的函数

  数组初叶化和对象初步化实际上是四个以字面量的艺术陈诉的初阶化的进度。那八个最早化表明式一时称做”对象直接量”和”数组直接量”

目的成立表明式

MemberExpression : 
MemberExpression [ Expression ] 
MemberExpression . IdentifierName 
new MemberExpression Arguments
FunctionExpression 

  若是指标表明式后跟随句点和标志符,则会招来由那么些标记符钦定的属性值,并将其当做一切表达式的值重临

函数表达式

复杂表达式(MemberExpression)

  分组表明式实际上正是括号,用于重写运算符的先行级

亚洲城ca88唯一备用,  第一种写法是贰个表达式后紧跟着三个句点和标记符。表达式内定对象,标记符则内定需求拜谒的性情的名目

上述所述是作者给大家介绍的JavaScript基础语法之js表明式的连带内容,希望对大家具备帮忙。假使大家有别的疑问请给小编留言,小编会及时还原大家的。在此也极度谢谢大家对剧本之家网址的帮衬!

  复杂表明式是由原有表明式和操作符(operator)组合而成,满含属性访问表明式、对象创立表明式和函数表明式

  函数表明式分为函数定义表明式和函数调用表明式

[];
[1,2,3];
{};
{a:1}; 
f(0);
Math.max(x,y,z);
a.sort();
Literal ::
NullLiteral
BooleanLiteral
NumericLiteral
StringLiteral 
RegularExpressionLiteral 
null;
undefined;
true;
false;
1;
'abc';
/pattern/; 

sum;//再次来到变量sum的值

new Object;

您大概感兴趣的稿子:

  • Javascript 6里的4个新语法
  • Javascript中级语法急速入手
  • javascript基础语法——周到通晓变量和标志符
  • javascript基本语法
  • JavaScript正则表明式上之宗旨语法(推荐)
  • js正则表达式基本语法(精彩)
  • NodeJs基本语法和品种
  • AngularJS语法详解(续)
  • AngularJS语法详解
  • javaScript语法计算

  原始表明式是表明式的细数码相飞机地点——它不再富含其余表明式。javascript中的原始表明式包涵this关键字、标志符征引、字面量援用、数组开始化、对象起头化和分组表明式

数组和对象早先化

  对象创造表明式创造贰个对象并调用一个函数初步化新指标的习性

  函数调用表明式是一种调用或实行函数或方式的语法表示。假使那几个表明式是叁特性质访谈表明式,那么这些调用称做方法调用

  不论哪个种类景况,借义务名的习性不设有,那么整个属性访谈表明式的值正是undefined

字面量

  借使总括结果不是指标,javascript会将其改变为对象

  第三种写法是行使方括号,方括号内是其他一个表明式(这种办法适用于对象和数组)。第4个表明式钦定要访问的个性的称呼或意味着要拜会数组成分的目录

var square = function(x){return x*x;} 

相关文章