第03章 - 基本概念

本章要点总结

六种基本数据类型
名称 说明
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 非零值 0NaN
Object 任何对象 null
Undefined n/a undefined
转换为字符串
名称 说明
obj.toString() 返回的对象的字符串表示;数值对象可以传入一个基数;NullUndefined 对象没有这个方法;
String(value) 更通用一点,可以转换 NullUndefined 类型

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 作为空指针用来初始化对象
  • nulltypeof 值为 "object"
  • undefined 派生自 nullnull == undefined 返回 true

3.4.4 Boolean 类型

使用 Boolean 函数,所有其他类型都可以转换为 Boolean 类型,下面是真值表:

类型 转换为 true 的值 转换为 false 的值
Boolean true false
String 任何非空字符串 ""(空字符串)
Number 非零值 0NaN
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

parseFloatparseInt 有类似的情况,同时小数点只认第一个

> parseFloat("0023.56.789.ase")
23.56

3.4.6 String 类型

单引号双引号都可以表示字符串

1. 转义符

字面量 含义
\n 换行
\t 制表符
\b 空格
\r 回车
\f 进纸
\\ 斜杠
\' 单引号
\" 双引号
\xnn 以十六进制表示一个字符
\unnnn 以十六进制表示一个 Unicode 字符

2. 字符串不可变

字符串是一种不可变对象,一旦创建就只能读取不能修改,这一点在各个语言中都一样

3. 转换为字符串

toString() 函数将其它类型的值转换为字符串

  • 数值、字符串、布尔和对象都有 toString() 方法,但是 NullUndefined 没有
  • 在数值上调用这个方法的时候,还可以传入一个基数
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() 函数更通用一点,可以将 NullUndefined 显示出来

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 语句
  • breakcontinue 语句
  • with 语句
  • switch 语句

3.7 函数

3.7.1 函数的参数

函数的参数本质上就是一个叫做 arguments 的数组

function sayHi() {
    alert("Hello " + arguments[0] + ", " + arguments[1]);
}

3.7.2 没有重载

Javascript 中函数没有重载,可以通过检测函数参数的不同数量,实现不同的功能

你可能感兴趣的:(第03章 - 基本概念)