包装类型

在JavaScript语言中,原始类型与包装类型创建的数据在使用上没有任何差异

定义变量的两种方式

// 直接/字面量 量方式定义
var bool = true;
//构造函数方式
var Bool = new Boolean(true);

创建对象的语法格式 new 构造函数(); 例如var Bool = new Boolean(true);表示创建一个值为true的变量Bool

三种包装类型分别是 布尔类型、数字类型、字符串类类型

var Bool = new Boolean(true);
var Num = new Number(100);
var Str = new String("this is message");

判断包装类型不能使用typeof而是使用instanceof 。语法结构变量名/对象名 instanceof 构造函数/数据类型

console.log(Str instanceof String);

特殊类型

undefined

得到undefined这个值的情况

  • 声明变量但未初始化值时。

    var msg;
    console.log(msg);
  • 声明变量并初始化值为undefined时。

    var msg1 = undefined;
    console.log(msg1);
  • 函数中的return语句的默认返回值。

  • 函数中的return语句的返回值的设置为undefined

  • 访问某一对象中不存在的属性时。

null

null 是5个基本类型的一个,但是得到的类型是object。这是JavaScript语言的历史遗留问题/当初设计的纰漏。所以当我们判断null类型时可以使用特殊方法console.log(Object.prototype.toString.call(null));

undefined与null的关系

undefined派生于null。他们两个值相等但类型不等。

console.log(undefined == null); // 结果true 说明值相等
console.log(undefined === null); // 结果false 说明类型不等

类型转换

关键点隐式类型转换显式类型转换
JavaScript官方规范官方未提及明确表明
执行效率/性能优于显式转换弱于隐式转换
难易程度不易容易

隐式类型转换

欲转换为转换符号说明示例
布尔!!将数据转换为布尔类型,在数据前加!!即可!!"this is message"
!!11
数字+将数据转换为数字类型,在数据前加+即可+"this is message"
+true
字符串""+将数据转换为字符串类型,与空字符串相加即可(位置无关)"" + 100
"" + true
  • 如果存在字符串的话,按照字符串的拼接操作
  • 没有字符串,而存在数字值的话,按照算数运算操作

显式类型转换

显示类型转换则是利用类型的构造方法

// 转化为 boolean 类型
console.log(typeof Boolean("this is message"));
console.log(typeof Boolean(100));
// 转化为number类型
console.log(typeof Number("100"));
console.log(typeof Number(true));
// 转化为 string 类型
console.log(typeof String(100));
console.log(typeof String(true));

关于转换为数字时JavaScript提供了提供了两个函数用户转换为number类型的整数和浮点数。

console.log(parseInt(11.11));
console.log(parseFloat(11.11));

但需要注意的是:转换为整型即parseInt函数,如果包含小数则将小数部分舍掉,并不会四舍五入计算。

console.log("100转化为", parseInt("100"));
console.log("100.55转化为", parseInt("100.55"));
console.log("100转化为", parseFloat("100"));
console.log("100.55转化为", parseFloat("100.55"));
/*
输出结果为:
100转化为 100
100.55转化为 100
100转化为 100
100.55转化为 100.55
*/

关于转换为string类型JavaScript还提供一个toString方法。

var num = 100;
var bool = true;
console.log(typeof num.toString());
console.log(typeof bool.toString());