作者最近在拜读《JavaScript高级程序设计(第三版)》,在此记录。 水平一般,有错误希望指正!

js - 基本数据类型

基js - 基本数据类型defined、Null、Boolean、Number、String

1. Undefined

> Undefined 类型只有一个值 undefined

 复现:
1. 调用前未初始化(var声明的变量)

console.log(name);  //undefined 
console.log(age); // *语法报错*
var name;

2. typeof 操作未声明变量

var name;
// age 未声明
console.log(typeof name); // undefined
console.log(typeof age); // undefined 是的,这里没报错

---
// 至于let声明的变量如何 *下面的案例并不能说明*
let weight;
console.log(typeof weight); // undefined


2. Null

> Null 类型只有一个值 null

从逻辑角度讲,null表示一个空对象指针,证明如下

var person = null;
console.log(typeof person); // object

实际上,undefined值是null派生的,因此ECMA-262规定他们的相等性测试要返回true也就是说

console.log(null == undefined); // true // 出于比较目的 == 会转换操作数
console.log(null === undefined); // false


3. Boolean

> Boolean 类型有两个字面值 true false 
> 但字面值和数字值不是一回事! true不一定等于1 false不一定等于0
> 这对if简写非常重要

js 所有类型中都有与true false 等价的值
 数值转换 Boolean()
String 类型

var str = "I am string";
var strEmpty = "";
console.log(Boolean(str));  // true
console.log(Boolean(strEmpty)); // false

Number 类型

var numZero = 0;
var numOne = 1;
var numPositiveInf = Infinity;
var numNegativeInf = -Infinity;
var numNaN = NaN;
var numNormal = 7;
console.log(Boolean(numZero)); // false
console.log(Boolean(numOne)); // true
console.log(Boolean(numPositiveInf)); // true
console.log(Boolean(numPositiveInf)); // true
console.log(Boolean(numNaN)); // false
console.log(Boolean(numNormal)); // true

Object 类型

var obj = {a:1, b:2, c:3};
var objEmpty = {};
var objNull = null;
console.log(Boolean(obj)); // true
console.log(Boolean(objEmpty)); // true
console.log(Boolean(objNull)); // false

Undefined 类型

var un = undefined;
console.log(Boolean(un)); // false

总结如下

数据类型 转换为true的值 转换为false的值
Boolean true false
String 任何非空字符串 空字符串
Number 任何非0值(包括无穷大Infinity) 0和NaN
Object 任何对象 null
Undefined 不适用 undefined


4. Number

> Number 类型有整数、浮点数值  

  1. 进制表示

var numOctal1 = 070; // 八进制  56
var numOctal2 = 079; // 无效的八进制 79
var numOctal3 = 08; // 无效的八进制 8
var numHex1 = 0xA; // 十六进制  10
var numHex2 = 0xG; // *报错*

  2. 浮点数

var numFloat1 = 1.1; // 1.1
var numFloat2 = 0.1; // 0.1
var numFloat3 = .1; // 0.1 不建议这种写法
var numFloat4 = 1.; // 1
var numFloat5 = 10.0; // 10
var numFloat6 = 3.125e7; // 31250000

// 对于特定的浮点数计算会出现舍入误差 这是基于IEEE754浮点计算的通病
var numFloat7 = 0.1;
var numFloat8 = 0.2;
console.log(numFloat7 + numFloat8); // 0.30000000000000004

  3. 数值范围
Infinity 无穷大 分正负

var max = Number.MAX_VALUE; // 1.7976931348623157e+308
console.log(max*2); // Infinity
var max = Number.MAX_VALUE * (-1); // -1.7976931348623157e+308
console.log(max*2); // -Infinity

  4. NaN

NaN 即 Not a Number 用于表示一个本来要返回数值的操作数未返回数值的情况
特点:
1. 任何涉及NaN的操作都返回NaN
2. NaN与任何值都不相等,包括NaN本身
console.log(NaN / 10); // NaN
console.log(NaN == NaN); // false

isNaN() 判断是否为非Number类型

console.log(isNaN(NaN)); // true
console.log(isNaN(10)); // false
console.log(isNaN("7")); // false
console.log(isNaN("age")); // true
console.log(isNaN(true)); // false
console.log(isNaN({a: 1, b: 2,c: 3})); // true
console.log(isNaN({a: "yellow",b: "red",c: "blue"})); // true

  5. 数值转换 Number() || parseInt()
Number() 在转换字符串时较复杂且不够合理,常用parseInt()


String部分 未完待续...


CregskiN
143 声望5 粉丝

焦虑驱动型学习者,喜欢 react 和 node