文章目录
  1. 1. JavaScript系列——数据类型
    1. 1.1. 语法
    2. 1.2. 变量
    3. 1.3. 数据类型
      1. 1.3.1. typeof操作符
      2. 1.3.2. Boolean类型
      3. 1.3.3. Number类型
      4. 1.3.4. 数值转化
      5. 1.3.5. String类型
      6. 1.3.6. Object类型

JavaScript系列——数据类型

语法

  • 区分大小写
    ECMAScript 中的一切(变量、函数名和操作符)都区分大小写
  • 标识符
    所谓标识符,就是指变量、函数、属性的名字,或者函数的参数:
    a.第一个字符必须是一个字母、下划线(_)或一个美元符号($)
    b.其他字符可以是字母、下划线、美元符号或数字
  • 严格模式
    ECMAScript 5 引入了严格模式(strict-mode),可以在脚本的顶部加入,也可以在函数的内部加入。
1
2
3
4
5
"use strict";

function doSomething(){
"use strict";
}

变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//全局变量
var message; //值为undefined
var maeesage = 'hello';
message = 100; //有效,但是不推荐,并且不管位置在哪,定义的都为全局变量,不利于维护

//局部变量
function test(){
var msg = "hi"; // 局部变量
}
test();
alert(msg); //错误!

//同时定义多个变量,用逗号隔开
var message = "hi",
found = false,
age = 29;

数据类型

ECMAScript 中有 5 种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number
和 String;还有 1 种复杂数据类型——Object,Object本质上是由一组无序的名值对组成的。

typeof操作符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
"undefined"——如果这个值未定义
"boolean"——如果这个值是布尔值
"string"——如果这个值是字符串
"number"——如果这个值是数值
"object"——如果这个值是对象 或 nullnull也是object
"function"——如果这个值是函数


var message; // 这个变量声明之后默认取得了 undefined 值
// 下面这个变量并没有声明
// var age
alert(typeof message); // "undefined"
alert(age); // 产生错误
alert(typeof age); // "undefined"
//因此,判断一个对象是否声明,可以使用typeof,非严格模式下是不会报错的

//undefined 值是派生自 null 值的,所以相等
alert(null == undefined); //true

Boolean类型

true 不一定等于 1,而 false 也不一定等于 0。

数据类型 转化为true 转化为false
Boolean true false
String 任何非空字符串 “”(空字符串)
Number 任何非零数字值(包括无穷大) 0和NaN
Object 非null对象 null
Undefined undefined

Number类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
var intNum = 55;            // 整数 

var octalNum1 = 070; // 八进制的 56
var octalNum2 = 079; // 无效的八进制数值——解析为 79
var octalNum3 = 08; // 无效的八进制数值——解析为 8

var hexNum1 = 0xA; // 十六进制的 10
var hexNum2 = 0x1f; // 十六进制的 31

var floatNum1 = 1.1;
var floatNum2 = 0.1;
var floatNum3 = .1; // 有效,但不推荐

// 如果浮点数值本身表示的就是一个整数(如 1.0),那么该值也会被转换为整数
var floatNum1 = 1.; // 小数点后面没有数字——解析为 1
var floatNum2 = 10.0; // 整数——解析为 10

var floatNum = 3.125e7; // 等于 31250000

// 不用用浮点数做只有的相等比较,会存在精度的问题
var a = 0.1
var b = 0.2
if (a + b == 0.3){ // 不要做这样的测试!
alert("You got 0.3.");
}

// Number.MIN_VALUE -> 5e-324 最小值
// Number.MAX_VALUE -> 1.7976931348623157e+308 最大值
// isFinite : 判断数值是否在有效的范围中
var result = Number.MAX_VALUE + Number.MAX_VALUE;
alert(isFinite(result)); //false

// NaN,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数
// 未返回数值的情况(这样就不会抛出错误了)
// 1.任何涉及 NaN 的操作(例如 NaN/10)都会返回 NaN
// 2.NaN 与任何值都不相等,包括 NaN 本身
alert(NaN == NaN); //false

//在基于对象调用 isNaN()函数时,会首先调用对象的valueOf()方法,然后确定该方法返回的值
//是否可以转换为数值。如果不能,则基于这个返回值再调用 toString()方法,再测试返回值。
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false(10 是一个数值)
alert(isNaN("10")); //false(可以被转换成数值 10)
alert(isNaN("blue")); //true(不能转换成数值)
alert(isNaN(true)); //false(可以被转换成数值 1)

数值转化

1
2
3
4
5
6
7
8
var num1 = Number("Hello world!");     //NaN 
var num2 = Number(""); //0
var num3 = Number("000011"); //11
var num4 = Number(true); //1
var num5 = Number(null); //0
var num6 = Number(undefined); //NaN
var num7 = Number(1.2); //1.2
var num8 = Number(0xf); //15

如果是对象,则调用对象的 valueOf()方法,然后依照前面的规则转换返回的值。如果转换
的结果是 NaN,则调用对象的 toString()方法,然后再次依照前面的规则转换返回的字符
串值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var num1 = parseInt("1234blue");    // 1234 
var num2 = parseInt(""); // NaN
var num3 = parseInt("0xA"); // 10(十六进制数)
var num4 = parseInt(22.5); // 22
var num5 = parseInt("070"); // 56(八进制数)
var num6 = parseInt("70"); // 70(十进制数)
var num7 = parseInt("0xf"); // 15(十六进制数)
//ECMAScript 3 认为是 56(八进制),ECMAScript 5 认为是 70(十进制)
var num = parseInt("070");

//指定按什么格式转化数据
var num = parseInt("0xAF", 16); //175
var num1 = parseInt("AF", 16); //175
var num2 = parseInt("AF"); //NaN

var num1 = parseInt("10", 2); //2 (按二进制解析)
var num2 = parseInt("10", 8); //8 (按八进制解析)
var num3 = parseInt("10", 10); //10 (按十进制解析)
var num4 = parseInt("10", 16); //16 (按十六进制解析)

与 parseInt()函数类似,parseFloat()也是从第一个字符(位置 0)开始解析每个字符。而且
也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止.

1
2
3
4
5
6
var num1 = parseFloat("1234blue");          //1234 (整数) 
var num2 = parseFloat("0xA"); //0
var num3 = parseFloat("22.5"); //22.5
var num4 = parseFloat("22.34.5"); //22.34
var num5 = parseFloat("0908.5"); //908.5
var num6 = parseFloat("3.125e7"); //31250000

String类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//null 和 undefined没有toString方法
var age = 11;
var ageAsString = age.toString(); // 字符串"11"
var found = true;
var foundAsString = found.toString(); // 字符串"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()
// 1. 如果值有 toString()方法,则调用该方法(没有参数)并返回相应的结果
// 2. 如果值是 null,则返回"null";
// 3. 如果值是 undefined,则返回"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"

Object类型

1
2
3
4
5
6
7
8
9
10
var o = new Object(); 
var o = new Object; // 有效,但不推荐省略圆括号

//constructor:保存着用于创建当前对象的函数
//hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在
//isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型
//propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用 for-in 语句来枚举
//toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应
//toString():返回对象的字符串表示
//valueOf():返回对象的字符串、数值或布尔值表示。通常与 toString()方法的返回值相同
文章目录
  1. 1. JavaScript系列——数据类型
    1. 1.1. 语法
    2. 1.2. 变量
    3. 1.3. 数据类型
      1. 1.3.1. typeof操作符
      2. 1.3.2. Boolean类型
      3. 1.3.3. Number类型
      4. 1.3.4. 数值转化
      5. 1.3.5. String类型
      6. 1.3.6. Object类型