比较运算符
概述
比较运算符用于比较两个值的大小,然后返回一个布尔值,表示是否满足指定的条件。
12 > 1 // true
上面代码比较2是否大于1,返回true。
注意,比较运算符可以比较各种类型的值,不仅仅是数值。
JavaScript 一共提供了8个比较运算符。
> 大于运算符
< 小于运算符
<= 小于或等于运算符
>= 大于或等于运算符
== 相等运算符
=== 严格相等运算符
!= 不相等运算符
!== 严格不相等运算符
这八个比较运算符分成两类:相等比较和非相等比较。两者的规则是不一样的,对于非相等的比较,算法是先看两个运算子是否都是字符串,如果是的,就按照字典顺序比较(实际上是比较
Unicode 码点);否则,将两个运算子都转成数值,再比较数值的大小。
非相等运算符:字符串的比较
字符串按照字典顺序进行比较。
12'cat' > 'dog' // false'cat' > 'catalog' // false
JavaScript 引 ...
算术运算符
运算符是处理数据的基本方法,用来从现有的值得到新的值。JavaScript
提供了多种运算符,覆盖了所有主要的运算。
概述
JavaScript 共提供10个算术运算符,用来完成基本的算术运算。
加法运算符:x + y
减法运算符: x - y
乘法运算符: x * y
除法运算符:x / y
指数运算符:x ** y
余数运算符:x % y
自增运算符:++x 或者
x++
自减运算符:--x 或者
x--
数值运算符: +x
负数值运算符:-x
减法、乘法、除法运算法比较单纯,就是执行相应的数学运算。下面介绍其他几个算术运算符,重点是加法运算符。
加法运算符
基本规则
加法运算符(+)是最常见的运算符,用来求两个数值的和。
11 + 1 // 2
JavaScript 允许非数值的相加。
12true + true // 21 + true // 2
上面代码中,第一行是两个布尔值相加,第二行是数值与布尔值相加。这两种情况,布尔值都会自动转成数值,然后再相加。
比较特殊的是,如果是两个字符串相加,这时加法运算符会变成连接运算符,返回一个新的字符串,将两个原字符串 ...
数组
定义
数组(array)是按次序排列的一组值。每个值的位置都有编号(从0开始),整个数组用方括号表示。
1var arr = ['a', 'b', 'c'];
上面代码中的a、b、c就构成一个数组,两端的方括号是数组的标志。a是0号位置,b是1号位置,c是2号位置。
除了在定义时赋值,数组也可以先定义后赋值。
12345var arr = [];arr[0] = 'a';arr[1] = 'b';arr[2] = 'c';
任何类型的数据,都可以放入数组。
123456789var arr = [ {a: 1}, [1, 2, 3], function() {return true;}];arr[0] // Object {a: 1}arr[1] // [1, 2, 3]arr[2] // function (){return true;}
上面数组arr的3个成员依次是 ...
函数
函数是一段可以反复调用的代码块。函数还能接受输入的参数,不同的参数会返回不同的值。
概述
函数的声明
JavaScript 有三种声明函数的方法。
(1)function 命令
function命令声明的代码区块,就是一个函数。function命令后面是函数名,函数名后面是一对圆括号,里面是传入函数的参数。函数体放在大括号里面。
123function print(s) { console.log(s);}
上面的代码命名了一个print函数,以后使用print()这种形式,就可以调用相应的代码。这叫做函数的声明(Function
Declaration)。
(2)函数表达式
除了用function命令声明函数,还可以采用变量赋值的写法。
123var print = function(s) { console.log(s);};
这种写法将一个匿名函数赋值给变量。这时,这个匿名函数又称函数表达式(Function
Expression),因为赋值语句的等号右侧只能放表达式。
采用函数表达式声明函数时,function命令后面不带有 ...
对象
概述
生成方法
对象(object)是 JavaScript
语言的核心概念,也是最重要的数据类型。
什么是对象?简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。
1234var obj = { foo: 'Hello', bar: 'World'};
上面代码中,大括号就定义了一个对象,它被赋值给变量obj,所以变量obj就指向一个对象。该对象内部包含两个键值对(又称为两个“成员”),第一个键值对是foo: 'Hello',其中foo是“键名”(成员的名称),字符串Hello是“键值”(成员的值)。键名与键值之间用冒号分隔。第二个键值对是bar: 'World',bar是键名,World是键值。两个键值对之间用逗号分隔。
键名
对象的所有键名都是字符串(ES6 又引入了 Symbol
值也可以作为键名),所以加不加引号都可以。上面的代码也可以写成下面这样。
1234var obj = { 'foo': 'Hello', & ...
字符串
概述
定义
字符串就是零个或多个排在一起的字符,放在单引号或双引号之中。
12'abc'"abc"
单引号字符串的内部,可以使用双引号。双引号字符串的内部,可以使用单引号。
12'key = "value"'"It's a long journey"
上面两个都是合法的字符串。
如果要在单引号字符串的内部,使用单引号,就必须在内部的单引号前面加上反斜杠,用来转义。双引号字符串内部使用双引号,也是如此。
12345'Did she say \'Hello\'?'// "Did she say 'Hello'?""Did she say \"Hello\"?"// "Did she say "Hello"?"
由于 HTML 语言的属性值使用双引号,所以很多项目约定 JavaScript
语言的字符串只使用单引 ...
数值
概述
整数和浮点数
JavaScript
内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。所以,1与1.0是相同的,是同一个数。
11 === 1.0 // true
这就是说,JavaScript
语言的底层根本没有整数,所有数字都是小数(64位浮点数)。容易造成混淆的是,某些运算只有整数才能完成,此时
JavaScript
会自动把64位浮点数,转成32位整数,然后再进行运算,参见《运算符》一章的“位运算”部分。
由于浮点数不是精确的值,所以涉及小数的比较和运算要特别小心。
123456780.1 + 0.2 === 0.3// false0.3 / 0.1// 2.9999999999999996(0.3 - 0.2) === (0.2 - 0.1)// false
数值精度
根据国际标准 IEEE 754,JavaScript
浮点数的64个二进制位,从最左边开始,是这样组成的。
第1位:符号位,0表示正数,1表示负数
第2位到第12位(共11位):指数部分
第13位到第64位(共52位):小数部分(即有效数字)
符号位决定了一个数的正负,指数部分决定 ...
null, undefined 和布尔值
null 和 undefined
概述
null与undefined都可以表示“没有”,含义非常相似。将一个变量赋值为undefined或null,老实说,语法效果几乎没区别。
123var a = undefined;// 或者var a = null;
上面代码中,变量a分别被赋值为undefined和null,这两种写法的效果几乎等价。
在if语句中,它们都会被自动转为false,相等运算符(==)甚至直接报告两者相等。
123456789101112if (!undefined) { console.log('undefined is false');}// undefined is falseif (!null) { console.log('null is false');}// null is falseundefined == null// true
从上面代码可见,两者的行为是何等相似!谷歌公司开发的 JavaScript
语言的替代品 D ...
数据类型概述
简介
JavaScript 语言的每一个值,都属于某一种数据类型。JavaScript
的数据类型,共有六种。(ES6 又新增了第七种 Symbol
类型的值,本教程不涉及。)
数值(number):整数和小数(比如1和3.14)。
字符串(string):文本(比如Hello World)。
布尔值(boolean):表示真伪的两个特殊值,即true(真)和false(假)。
undefined:表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值。
null:表示空值,即此处的值为空。
对象(object):各种值组成的集合。
通常,数值、字符串、布尔值这三种类型,合称为原始类型(primitive
type)的值,即它们是最基本的数据类型,不能再细分了。对象则称为合成类型(complex
type)的值,因为一个对象往往是多个原始类型的值的合成,可以看作是一个存放各种值的容器。至于undefined和null,一般将它们看成两个特殊值。
对象是最复杂的数据类型,又可以分成三个子类型。
狭义的对象(object)
数组(array)
函数(func ...
JavaScript 的基本语法
语句
JavaScript
程序的执行单位为行(line),也就是一行一行地执行。一般情况下,每一行就是一个语句。
语句(statement)是为了完成某种任务而进行的操作,比如下面就是一行赋值语句。
1var a = 1 + 3;
这条语句先用var命令,声明了变量a,然后将1 + 3的运算结果赋值给变量a。
1 + 3叫做表达式(expression),指一个为了得到返回值的计算式。语句和表达式的区别在于,前者主要为了进行某种操作,一般情况下不需要返回值;后者则是为了得到返回值,一定会返回一个值。凡是
JavaScript
语言中预期为值的地方,都可以使用表达式。比如,赋值语句的等号右边,预期是一个值,因此可以放置各种表达式。
语句以分号结尾,一个分号就表示一个语句结束。多个语句可以写在一行内。
1var a = 1 + 3 ; var b = 'abc';
分号前面可以没有任何内容,JavaScript 引擎将其视为空语句。
1;;;
上面的代码就表示3个空语句。
表达式不需要分号结尾。一旦在表达式后面添加分号,则 Ja ...