原始表达式

最简单的表达式是"原始表达式"(primary expression)。JavaScript中的原始表达式包含常量或直接量、关键字和变量。

// 常量或直接量
1.23 //数字直接量
"hello" //字符串直接量
/pattern/ //正则表达式直接量 // 关键字
true //返回一个布尔值:真
false //返回一个布尔值:假
null //返回一值 :空
this //返回”当前“ 对象 //变量
i //返回变量i的值
sum //返回sum的值
undefined // undefined 是全局变量,和null 不同,它不是一个关键字

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

对象和数组初始化表达式实际上是一个新创建的对象和数组。这些初始化表达式有时称作”对象直接量“ 和”数组直接量“。

数组表达式是通过一对方括号和其内由逗号的列表构成的。初始化的结果是一个新创建的数组。

[]                         //一个空的数组:[] 内留空即表示该数组没有任何元素
[1+2,3+4] //拥有两个元素的数组,第一个是3,第二个是7 //数组初始化表达式中的元素初始化表达式也可以是数组初始化表达式。 var matrix=[[1,2,3],[4,5,6], [7,8,9]]; //数组直接两种的列表逗号之间元素可以省略,这时省略的空位会填充 undefined。下面这个数组包含5个元素,其中三个元素是 undefined var sparseArray=[1,,,,5];

数组直接量的元素列表结尾处可以留下单个逗号,这时并不会创建一个新的值为undefined 的元素。

对象初始化表达式和数组初始化表达式非常相似,只是方括号被花括号代替,并且每个表达式都保护一个属性名和一个冒号作为前缀:

var  p= {x:2.3,y:-1.2}                  //一个拥有两个属性成员的对象
var q= {} //一个空对象
q.x=2.3;q.y=-1.2; //q的属性成员和p的一样 //对象直接量也可以嵌套
var rectangle { upperLeft:{ x:2,y:2},
lowerRight:{x:4,y:5 } };

JavaScript 求对象初始化表达式的值得时候,对象表达式也都会自计算一次,并且他们不必包含常熟值:它们可以是任意 JavaScript 表达式。

var side=1;

var rectangle { "upperLeft":{ x:p.x,y:p.y},
' lowerRight':{ x:p.x+ side,y:p.y +side} };

函数定义表达式

函数定义表达式定义一个JavaScript函数。表达式的值是这个新定义的函数。

一个典型的函数定义表达式包含关键字 function。跟随其后的是一对圆括号,括号内是一个以逗号分隔的列表,列表含有0个或多个标识符(参数名),

然后在跟随一个有花括号包裹的JavaScript的代码段(函数体)

//这个函数返回传入参数值得平方
var square = function(x) { return x*x };

属性访问表达式

属性访问表达式运算得到一个对象属性或一个数组元素的值。JavaScript为属性访问定义了两种语法:

expression . indentufier

expression [ expression ]

var o= {x:1,y:{z:3}};               //一个示例对象
var a= [o,4,[55,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[0].x // => 1:表达式a[0]的x的属性

运算符概述

运算符优先级

上图所示的运算符是按照优先级从高到低的排序的,每个水平分割线内的一组运算符具有相同的优先级。

运算符优先级控制着运算符的执行顺序。优先级高的运算符(上图顶部)的执行总是先于优先级低(上图底部)的运算符。

//下面这个表达式
w=x + y * z; //乘法运算符"*"比加法运算符”+“的优先级高,所以乘法先执行,加法后执行. //运算符的优先级可以通过圆括号来重新。 w=(x + y) * z; //加法先执行,乘法法后执行.

需要注意的是,属性访问表达式优先级要上图列出的所有运算符都高。

”+“运算符

二元加法运算符”+“可以对两个数组做加法,也可以做字符串连接操作:

1 +2                               //=>3
"hello"+ " "+ "there" //=>”hello there“ //还有一些特殊的列子 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做加法

var i=1,j=++i;  // i 和 j 都是2

var i=1,j=i++; // i 是2 , j 是1

相等和不相等运算符

”==“ 和”===“运算符用于比较两个值是否相等,当然他们对相等的定义不尽相同。

两个运算符允许任意类型的操作数,如果操作数相等则返回 true ,否则返回false.

"===" 也称为严格相等运算符(strict equality)(也叫恒等运算符),他用来检测两个操作数是否严格相等。

"==" 运算符称作相等运算符(equality operator)用来检测两个操作数是否相等,可以允许进行类型转换

例如

”1“== true          //返回为true

”1“=== true          //返回为false

【JavaScript 从零开始】表达式和运算符(1)的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. C#图解教程 第八章 表达式和运算符

    表达式和运算符 表达式字面量 整数字面量实数字面量字符字面量字符串字面量 求值顺序 优先级结合性 简单算术运算符求余运算符关系比较运算符和相等比较运算符递增运算符和递减运算符条件逻辑运算符逻辑运算符移 ...

  7. Python3基础-表达式和运算符

    表达式和运算符 什么是表达式? 1+2*3就是一个表达式,这里的加号和乘号叫做运算符,1.2.3叫做操作数. 1+2*3经过计算后得到的结果是7,我们可以将计算结果存放在一个变量里,result=1+ ...

  8. Python --表达式和运算符

    表达式 由一个或者几个数字或者变量和运算符组合成的一行代码 通常会返回一个结果 运算符 由一个以上的值经过变化得到新值的过程就叫做运算 用于运算的符号称为运算符 运算符的分类: 算数运算符 比较或者关 ...

  9. 【JavaScript 从零开始】表达式和运算符(2)

    in运算符 in运算符希望它的左操作数是一个字符串或可以转换为字符串,希望它的右操作数是一个对象. 如果右侧的对象拥有一个名为做操作数值的属性名,那么表达式返回true,例如: var point= ...

随机推荐

  1. Asp .Net Core网页数据爬取笔记

    突然要用到地区数据,想到以前用python的Scrapy框架写过一个爬虫,于是打算直接去国家统计局把最新的地区数据抓取回来.本想只需要copy一下以前的代码,就可以得到新鲜出炉的数据,谁知打开以前的项 ...

  2. WebApi(2)

    WebApi2 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !importa ...

  3. 《JavaScript高级程序设计》第六章【面向对象的程序设计】 包括对象、创建对象、继承

    一.理解对象 二.创建对象      1. 工厂模式      2. 构造函数模式      3. 原型模式      4. 组合使用构造函数模式和原型模式[使用最广泛]      5. 动态原型模式 ...

  4. Delphi - 如何执行Windows、OSX、Linux的外部程序?

    毫无疑问,几乎对所有Delphi程序员来说,不用说如何在Windows下如何执行外部程序了!目前Delphi,真的已经很棒了,Delphi有一套和VCL并驾齐驱的图形界面库,叫做"FireM ...

  5. Mysql分析-profile详解

    一.前言当我们要对某一条sql的性能进行分析时,可以使用它. Profiling是从 mysql5.0.3版本以后才开放的.启动profile之后,所有查询包括错误的语句都会记录在内.关闭会话或者se ...

  6. 三,mysql优化--sql语句优化之索引一

    1,需求:如何在一个项目中,找到慢查询的select,mysql数据库支持把慢查询语句,记录到日志中.供程序员分析.(默认不启用此功能,需要手动启用) 修改my.cnf文件(有些地方是my.ini) ...

  7. webpack快速入门——集中拷贝静态资源

    工作中会有一些已经存在但在项目中没有引用的图片资源或者其他静态资源(比如设计图.开发文档), 这些静态资源有可能是文档,也有可能是一些额外的图片.项目组长会要求你打包时保留这些静态资源, 直接打包到制 ...

  8. Maven+SSM框架项目实例——IDEA

    一.项目环境 开发系统:Window10 开发工具:IDEA JDK:1.8 框架:Maven+Spring+SpringMVC+Mybatis 数据库:Mysql 二.项目结构 项目文件架构:  三 ...

  9. 快速滑动时 `cellForRow` 的调用次数

    问题 有一个 1000 个 cell 的 tableView,刚刚进入界面时,contentOffset 为 0.用手快速滑动 tableView,直至最下面一个 cell 显示在屏幕上. 这个过程中 ...

  10. Python Django 的学习资料

    十分有用的链接: 链接1:http://www.cnblogs.com/wupeiqi/articles/5433893.html   (银角大王) 链接2:https://www.cnblogs.c ...