JS基本数据类型

1
2
3
4
<script type="text/javascript" src="js/scrpit.js">
//script标签用src属性引入外部js文件后,标签内部的js代码会被忽略
alert("此处不会弹窗")
</script>
  • 标识符只允许数字、字母、下划线和$,且不允许以数字开头
1
let a_1_$ = 123;
  • 5种基本数据类型 String、Number (整数和浮点数)、Boolean (true 和 false)、Null (null)、Undefined (undefined) 和 1 种引用数据类型 Object

  • typeof 运算符的返回类型为字符串,值包括 ‘undefined’ 、’boolean’、’string’、 ‘number’、’object’ 和’function’

1
2
3
4
console.log(typeof NaN); // "number"
console.log(typeof new Array()); // "object"
console.log(typeof null);// 由于历史原因,null 类型进行 typeof 操作符后,结果是 "object"
console.log(typeof typeof null); // "string"
  • String() 转换为 String 类型
1
2
3
4
5
let a = 213;
String(a); // 此时 String(a) 等价于 a.toString(),底层调用是一样的

a = null;
String(a); // 无 a.toString() 方法
  • Number() 转化为 Number 类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
a = "0.123";
console.log(Number(a)); // 转化为相应的 number 类型数据

let b = "";
console.log(Number(b)); // 空串 --> 0

let c = "123k";
console.log(Number(c)); // NaN

let d = true;
console.log(Number(d)); // true --> 1

let e = null;
console.log(Number(e)); // null --> 0

let f = undefined;
console.log(Number(f)); // undefined --> NaN
  • parseInt(string: string, radix?: number)
1
2
a = "010";
console.log(parseInt(a,8)); // 指定进制 radix 转化为 number
  • Boolean() 转化为 Boolean 类型
1
console.log(Booleanl(a)); // 除了 0、NaN、null、空串"" 外,其余的 Boolean() 都返回 true
  • 任何值与字符串相加,都返回字符串。其他的加法、减法、乘除法都转化 number,再进行运算
1
2
3
4
5
6
7
console.log(NaN + "1"); // "NaN1"

console.log(3 + null); // 3
console.log(3 + undefined); // NaN
console.log(100 - "1"); // 99
console.log(3 * null); // 0

逻辑运算

  • 根据“短路原则”。

    两值相与时,第一个值为 true,则返回第二个值;第一个值为 false,则返回第一个值。

    两值相或时,第一个值为 true,则返回第一个值;第一个值为 false,则返回第二个值。

1
2
3
4
5
console.log(3 && 5);	// 5
console.log(NaN && 0); // NaN

console.log(3 || 5); // 3
console.log("" || 0); // 0
  • 比较运算时,自动转化为 number 类型。任何值与 NaN 进行比较运算,都返回 fasle
1
2
console.log(1 > "");	// 等价于1 > 0,返回 true
console.log(null <= "hello"); // 等价于 0 <= NaN,返回 false

​ 特别地,当两字符串相比较时,即比较 Unicode 码

1
2
console.log("2.a" > "2.b");	// false,因为 a 为 97,b 为 98
console.log("1a" > "10asd");// true,因为 a 为 97,0 为 48
  • 进行 == 比较运算时

    (1)如果两个值类型相同,再进行三个等号(===)的比较

    (2)如果两个值类型不同,也有可能相等,需根据以下规则进行类型转换在比较:

    ​ 1)如果一个是 null,一个是 undefined,那么相等

    ​ 2)如果一个是字符串,一个是数值,把字符串转换成数值之后再进行比较

    1
    2
    3
    console.log(1 == "1");	// true
    console.log(1 == "1a"); // false,等价于 1 == NaN
    console.log(null == undefined); // true

​ 特别地,NaN 不与任何值相同(包括它自己),用 isNaN() 来判断