本章要点总结
六种基本数据类型
名称 | 说明 |
---|---|
Undefinede |
未定义类型 |
Null |
空类型 |
Boolean |
布尔类型 |
Number |
数字类型 |
String |
字符串类型 |
Object |
对象类型 |
数据类型相关操作符和关键字
名称 | 说明 |
---|---|
typeof |
返回六种基本类型中的五种(其中 Null 返回 "object" ),另外函数类型返回 "function" |
null |
空指针,typeof 值为 "object" ,一般用来初始化对象 |
undefined |
未初始化的变量和未声明的变量会返回这个值 |
typeof
返回值
类型 | 返回值 |
---|---|
Undefinede |
"undefined" |
Null |
"object" |
Boolean |
"boolean" |
Number |
"number" |
String |
"string" |
Object |
"object" |
Function |
"function" |
数值相关属性和方法
名称 | 说明 |
---|---|
Number.MIN_VALUE |
最大值 |
Number.MAX_VALUE |
最小值 |
Infinity |
无穷大 |
NaN |
非数 |
isFinite(n) |
判断一个值是不是无穷大 |
isNaN(NaN) |
判断一个值是不是非数 |
字符串转换为数值
名称 | 说明 |
---|---|
Number(value) |
尽可能的转换,可以转换布尔类型,和字符串类型 |
parseInt(value) |
从第一个字符向后扫描连续的整数。第二个参数可以设置整数的进制 |
parseFloat(value) |
和 parseInt(value) 类似,只认第一个小数点 |
任意类型转换为布尔类型
名称 | 说明 |
---|---|
Boolean(value) |
将其他类型的值转换成 Boolean 值,所有类型都可以转换 |
真值表
类型 | 转换为 true 的值 |
转换为 false 的值 |
---|---|---|
Boolean |
true |
false |
String |
任何非空字符串 | "" (空字符串) |
Number |
非零值 | 0 和 NaN |
Object |
任何对象 | null |
Undefined |
n/a |
undefined |
转换为字符串
名称 | 说明 |
---|---|
obj.toString() |
返回的对象的字符串表示;数值对象可以传入一个基数;Null 和 Undefined 对象没有这个方法; |
String(value) |
更通用一点,可以转换 Null 和 Undefined 类型 |
3.1 语法
3.1.1 区分大小写
3.1.2 标示符
3.1.3 注释
3.1.4 严格模式
在严格模式下,Javascript 引擎会有不同的行为。
在整个脚本中引入严格模式如下:
"user strict"
在函数体内引入严格模式如下:
function doSomething(){
"use strict";
//function body
}
3.1.5 语句
- 不要省略分号
- 能用花括号的地方都应该用
3.2 关键字和保留字
3.3 变量
- 变量不保持类型
- 用
var
定义的变量是局部变量;没有var
直接定义的变量是全局变量 - 一条语句中可以定义多个变量
var message = "hi",
found = false,
age = 29;
3.4 数据类型
Javascript 有六种数据类型
Undefinede
Null
Boolean
Number
String
Object
3.4.1 typeof 操作符
typeof
返回上面六种类型中的五种(其中 Null
返回"object"
),另外加上函数类型
- 如果未定义则返回
"undefined"
- 如果是布尔值则返回
"boolean"
- 如果是字符串则返回
"string"
- 如果是数字则返回
"number"
- 如果是对象则返回
"object"
- 如果是函数则返回
"function"
再次强调 typeof null == "object"
3.4.2 Undefined 类型
-
Undefined
类型只有一个值就是undefined
- 声明了但是未初始化的变量的值是
undefined
- 未声明的变量的值也是
undefined
3.4.3 Null 类型
-
null
作为空指针用来初始化对象 -
null
的typeof
值为"object"
undefined
派生自null
,null == undefined
返回true
3.4.4 Boolean 类型
使用 Boolean
函数,所有其他类型都可以转换为 Boolean
类型,下面是真值表:
类型 | 转换为 true 的值 |
转换为 false 的值 |
---|---|---|
Boolean |
true |
false |
String |
任何非空字符串 | "" (空字符串) |
Number |
非零值 | 0 和 NaN |
Object |
任何对象 | null |
Undefined |
n/a |
undefined |
3.4.5 Number 类型
不同进制的字面量
- 十进制
33
- 八进制
067
- 十六进制
0x3a
1. 浮点数
可以被转换成整数的浮点数总是会被转换,如
> 1.0
1
可以用科学计数法表示浮点数,小数点后面超过6个零的数会用科学计数法表示
> 3.21e6
3210000
> 0.0000000000153
1.53e-11
> 15300000000000
15300000000000
需要注意的是,浮点数并不精确
> 0.1 + 0.2
0.30000000000000004
2 数值范围
- 最小值可以用
Number.MIN_VALUE
表示,值为5e-324
- 最大值可以用
Number.MAX_VALUE
表示,值为1.7976931348623157e+308
- 超过最大值返回
Infinity
即正无穷,小于最小数返回-Infinity
即负无穷 - 使用
isFinite()
函数可以判断一个变量是不是无穷大
> Number.MIN_VALUE
5e-324
> Number.MAX_VALUE
1.7976931348623157e+308
> Number.MAX_VALUE + Number.MAX_VALUE
Infinity
> -1 / 0
-Infinity
> isFinite(Number.MAX_VALUE + Number.MAX_VALUE)
false
3. NaN
- 任何数除以
0
都返回NaN
- 任何涉及到
NaN
的操作都返回NaN
-
NaN
不和任何值相等,包括他自己
> 10/0
Infinity
> NaN/10
NaN
> NaN == NaN
false
函数 isNaN
可以判断一个值是否是 NaN
。注意:有些值可以被转换为数值,因此不会返回 NaN
> isNaN(NaN)
true
> isNaN("blue")
true
> isNaN(10)
false
> isNaN("10")
false
> isNaN(true)
false
>
4. 数值转换
有三个转换数值的函数,分别是
Number()
parseInt()
parseFloat()
Number
会尽可能的将值转换为数值,只要能转换的都转换,甚至可以部分转换
> Number("hello")
NaN
> Number("")
0
> Number(true)
1
> Number(false)
0
> Number("12.345")
12.345
> Number("0xff")
255
praseInt
只解析看到的数字部分,其他一律不解析
> parseInt("Hello")
NaN
> parseInt("")
NaN
> parseInt(true)
NaN
> parseInt(false)
NaN
> parseInt("32.67abcd")
32
> parseInt("0xff")
255
parseInt
函数可以指定转换的进制,ECMAScript 5 引擎下,0
前导的字符串不会被认为是八进制数,可之前的版本不一样,因此使用这个函数最好都指定转换进制。
> parseInt("010")
10
> parseInt("010",2)
2
> parseInt("010",8)
8
> parseInt("010",16)
16
parseFloat
和 parseInt
有类似的情况,同时小数点只认第一个
> parseFloat("0023.56.789.ase")
23.56
3.4.6 String 类型
单引号双引号都可以表示字符串
1. 转义符
字面量 | 含义 |
---|---|
\n |
换行 |
\t |
制表符 |
\b |
空格 |
\r |
回车 |
\f |
进纸 |
\\ |
斜杠 |
\' |
单引号 |
\" |
双引号 |
\xnn |
以十六进制表示一个字符 |
\unnnn |
以十六进制表示一个 Unicode 字符 |
2. 字符串不可变
字符串是一种不可变对象,一旦创建就只能读取不能修改,这一点在各个语言中都一样
3. 转换为字符串
用 toString()
函数将其它类型的值转换为字符串
- 数值、字符串、布尔和对象都有
toString()
方法,但是Null
和Undefined
没有 - 在数值上调用这个方法的时候,还可以传入一个基数
var age = 11;
var ageAsString = age.toString(); //the string "11"
var found = true;
var foundAsString = found.toString(); //the string "true"
var num = 10;
alert(num.toString()); //"10"
alert(num.toString(2)); //"1010"
alert(num.toString(8)); //"12"
alert(num.toString(10)); //"10"
alert(num.toString(16)); //"a"
String()
函数更通用一点,可以将 Null
和 Undefined
显示出来
var value1 = 10;
var value2 = true;
var value3 = null;
var value4;
alert(String(value1)); //"10"
alert(String(value2)); //"true"
alert(String(value3)); //"null"
alert(String(value4)); //"undefined"
3.4.7 Object 类型
Object
是所有对象的基类,创建一个对象的方法:
var o = new Object();
所有对象都继承了以下方法和属性:
-
constructor
:保存着构造函数 -
hasOwnproperty(propertyName)
:用来查询属性是否存在 -
isPrototypeOf(obj)
:是否是某个对象的原型 -
propertyIsEnumerable(propertyName)
:某个属性是否可枚举 -
toLocaleString()
:返回与环境对应的对象字符串 -
toString()
:返回对象字符串 -
valueOf()
:返回对象的字符串、数值或者布尔表示
3.5 操作符
3.5.1 一元操作符
3.5.2 一元赋值操作符
把一元操作符应用到非数值类型时,首先会尽量将其转换为数值,如果不能转换则返回 NaN
var s1 = "2";
var s2 = "z";
var b = false;
var f = 1.1;
var o = {
valueOf: function() {
return -1;
}
};
s1++; //value becomes numeric 3
s2++; //value becomes NaN
b++; //value becomes numeric 1
f--; //value becomes 0.10000000000000009 (due to floating-point inaccuracies)
o--; //value becomes numeric -2
var s1 = "01";
var s2 = "1.1";
var s3 = "z";
var b = false;
var f = 1.1;
var o = {
valueOf: function() {
return -1;
}
};
s1 = -s1; //value becomes numeric -1
s2 = -s2; //value becomes numeric -1.1
s3 = -s3; //value becomes NaN
b = -b; //value becomes numeric 0
f = -f; //change to -1.1
o = -o; //value becomes numeric 1
3.5.2 位操作符
负数:操作数的绝对值求反,然后加 1
求反:正好是求负数的逆过程,变成负数然后减 1 即可
3.5.3 布尔操作符
根据前面 3.4.3 的真值表进行操作
Javascript 的布尔操作也有短路
3.5.4 乘性操作符
3.5.5 加性操作符
3.5.6 关系操作符
注意:不同类型的数据也可以比较,使用时应该查看手册
3.5.7 相等操作符
注意:不同类型的数据也可以比较,使用时应该查看手册
3.5.8 三元操作符
var max = (num1 > num2) ? num1 : num2;
3.5.9 赋值操作符
3.5.10 逗号操作符
在一条语句中执行多个赋值
var num1=1, num2=2, num3=3;
3.6 语句
-
if
语句 -
do-while
语句 -
while
语句 -
for
语句 -
for-in
语句 -
label
语句 -
break
和continue
语句 -
with
语句 -
switch
语句
3.7 函数
3.7.1 函数的参数
函数的参数本质上就是一个叫做 arguments 的数组
function sayHi() {
alert("Hello " + arguments[0] + ", " + arguments[1]);
}
3.7.2 没有重载
Javascript 中函数没有重载,可以通过检测函数参数的不同数量,实现不同的功能