作者最近在拜读《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部分 未完待续...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。