JavaScript高级程序设计读书分享之3章——3.4数据类型

JavaScript高级程序设计(第4版)读书分享笔记记录

适用于刚入门前端的同志

 ECMAScript 有 6 种简单数据类型(也称为原始类型):UndefinedNullBooleanNumberString 和 Symbol(es6新增)。  

还有一种复杂数据类型叫 Object(对象)

typeof 操作符

对一个值使用 typeof 操作符会返回下列字符串之一:
  •  "undefined"表示值未定义;
  •   "boolean"表示值为布尔值;
  •  "string"表示值为字符串;
  •  "number"表示值为数值;
  •  "object"表示值为对象(而不是函数)或 null
  •  "function"表示值为函数;
  •  "symbol"表示值为符号。
let message = "some string"; 
console.log(typeof message); // "string" 
console.log(typeof(message)); // "string" 
console.log(typeof 95); // "number"

instanceof操作符

typeof 虽然对原始值很有用,但它对引用值的用处不大。为了解决这个问题, ECMAScript 提供了 instanceof 操作符
语法:
result = variable instanceof constructor

Undefined 类型

Undefined 类型只有一个值,就是特殊值 undefined 。当使用 var let 声明了变量但没有初始
化时,就相当于给变量赋予了 undefined

Null 类型

Null 类型同样只有一个值,即特殊值 null 。逻辑上讲, null 值表示一个空对象指针,这也是给
typeof 传一个 null 会返回 "object" 的原因

let car = null; 
console.log(typeof car); // "object"

Boolean 类型

Boolean (布尔值)类型是 ECMAScript 中使用最频繁的类型之一,有两个字面值: true false
不同类型与布尔值之间的转换规则

//理解以上转换非常重要,因为像 if 等流控制语句会自动执行其他类型值到布尔值的转换,例如:
let message = "Hello world!"; 
if (message) { 
 console.log("Value is true"); 
}

Number 类型

浮点值

let floatNum1 = 1.1; 
let floatNum2 = 0.1;

NaN 

有一个特殊的数值叫 NaN ,意思是“不是数值”( Not a Number ),用于表示本来要返回数值的操作失败了(而不是抛出错误)。
isNaN() 函数:该函数接收一个参数,可以是任意数据类型,然后判断这个参数是否“不是数值”。
console.log(isNaN(NaN)); // true 
console.log(isNaN(10)); // false,10 是数值
console.log(isNaN("10")); // false,可以转换为数值 10 
console.log(isNaN("blue")); // true,不可以转换为数值
console.log(isNaN(true)); // false,可以转换为数值 1

数值转换

有3 个函数可以将非数值转换为数值: Number()parseInt()parseFloat()
Number() 函数基于如下规则执行转换:
  • 布尔值,true 转换为 1false 转换为 0
  •  数值,直接返回。
  •  null,返回 0
  •  undefined,返回 NaN
  •  字符串,有相应规则(具体见书籍36页)。
let num1 = Number("Hello world!"); // NaN 
let num2 = Number(""); // 0 
let num3 = Number("000011"); // 11 
let num4 = Number(true); // 1
通常在需要得到整数时可以优先使 用 parseInt() 函数。
let num1 = parseInt("1234blue"); // 1234 
let num2 = parseInt(""); // NaN 
let num3 = parseInt("0xA"); // 10,解释为十六进制整数
let num4 = parseInt(22.5); // 22 
let num5 = parseInt("70"); // 70,解释为十进制值
let num6 = parseInt("0xf"); // 15,解释为十六进制整数
parseFloat()
let num3 = parseFloat("22.5"); // 22.5 
let num4 = parseFloat("22.34.5"); // 22.34

String 类型

String()

let value1 = 10; 
let value2 = true; 
let value3 = null; 
let value4; 
console.log(String(value1)); // "10" 
console.log(String(value2)); // "true" 
console.log(String(value3)); // "null" 
console.log(String(value4)); // "undefined"

模板字面量

ECMAScript 6 新增了使用模板字面量定义字符串的能力。
注意: 由于模板字面量会保持反引号内部的空格,因此在使用时要格外注意。

let myTemplateLiteral = `first line 
 second line`; 
console.log(myTemplateLiteral.length); // 47

字符串插值

模板字面量最常用的一个特性是支持字符串插值,也就是可以在一个连续定义中插入一个或多个
值。
字符串插值通过在 ${} 中使用一个 JavaScript 表达式实现:
let age = 25
let name = '小美'; 
// 以前,字符串插值是这样实现的:
let interpolatedString = 
 name+ ' 今年 ' + age + ' 岁了 '; 
// 现在,可以用模板字面量这样实现:
let interpolatedTemplateLiteral = 
 `${ name } 今年 ${ age } 岁了`; 
console.log(interpolatedString); // 小美今年25岁了
console.log(interpolatedTemplateLiteral); // 小美今年25岁了

Symbol 类型

Symbol (符号)是 ECMAScript 6 新增的数据类型。符号是原始值,且符号实例是唯一、不可变的。 符号的用途是确保对象属性使用唯一标识符,不会发生属性冲突的危险。
symbol类型通过Symbol函数生成,用于表示独一无二的值
let sym = Symbol(); 
console.log(typeof sym); // symbol
      

即使使用相同的字符串来创建Symbol类型的值,这些值也是不同的

let fooSymbol = Symbol('foo'); 
let otherFooSymbol = Symbol('foo'); 
console.log(genericSymbol == otherGenericSymbol); // false

最重要的是, Symbol() 函数不能与 new 关键字一起 作为构造函数 使用
let mySymbol = new Symbol(); // TypeError: Symbol is not a constructor

Object 类型

ECMAScript 中的对象其实就是一组数据和功能的集合。对象通过 new 操作符后跟对象类型的名称
来创建。
let o = new Object();

猜你喜欢

转载自blog.csdn.net/weixin_42307283/article/details/129011053