JS数据类型

前言

之前发现随笔写的比较杂乱无章,现在开始慢慢从JS基础慢慢写,本篇先讲述一下JS的数据类型。

 

在JavaScript中有五种简单数据类型(基本数据类型):undefined、null、boolean、number和string(另外,在ES6中新增了一种基本数据类型:symbol),和一种复杂数据类型:object。

一、数据类型介绍:

① undefined

undefined意为未定义的,当用var声明一个变量但未初始化,其值就是undefined

var a;
console.log(a); // undefined

 

② null

null表示一个空对象指针,与undefined不同的是:一般null用于初始化保存对象,真因为如此,在使用typeof操作符检测null时会返回"object"

 

③ boolean

boolean类型只包含两个值:true和false

使用Boolean()函数可以将值转化成boolean类型的值,除了以下六个转为布尔值时为false,其他都为true:

console.log(Boolean("")); // false
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
console.log(Boolean(0)); // false
console.log(Boolean(NaN)); // false
console.log(Boolean(false)); // false

 

④ number

1.进制

var num = 10; // 十进制
var num = 07; // 八进制以"0"开头
var num = 0x1f; // 十六进制以"0x"开头

注:在进行算术计算时,所有以八进制和十六进制表示的数值终都将被转换成十进制数值。

 

2.浮点数值

var num1 = 1.1; // 定义浮点型数字
var num2 = .1; // 整数部分为0时可以省略整数部分

另外:浮点数值的高精度是 17位小数,但在进行算术计算时其精确度远远不如整数。例如,0.1 加 0.2 的结果为 0.30000000000000004。那么应该怎样来解决0.1+0.2等于0.3呢? 最好的方法是设置一个误差范围值,通常称为”机器精度“,而对于 JavaScript 来说,这个值通常是2^-52,而在 ES6 中,已经为我们提供了这样一个属性:Number.EPSILON,而这个值正等于2^-52。这个值非常非常小,在底层计算机已经帮我们运算好,并且无限接近0,但不等于0,。这个时候我们只要判断(0.1+0.2)-0.3小于Number.EPSILON,在这个误差的范围内就可以判定0.1+0.2===0.3为true。

function numbersEqual(a,b){
    return Math.abs(a-b)<Number.EPSILON;
}
var a=0.1+0.2,
b=0.3;
console.log(numbersEqual(a,b)); //true

 

3.NaN

NaN是一个特殊值,使用isNaN()方法判断是否为NaN

console.log(NaN == NaN); // false
console.log(isNaN(NaN)); // true

 

4.数值转换

数值转换主要有以下3个函数:Number()、parseInt() 和 parseFloat()

Number("Hello world!"); // NaN
Number(true); // 1
parseInt("1.1"); // 1(转换为整数型,如需要转换浮点型需要使用parseFloat)
parseFloat("1.1"); // 1.1

 

⑤ string

定义字符串可以使用 toString() 或 String() 方法将其他类型转为字符串

var a = 1;
a.toString(); // "1"
String(a); // "1"

 

⑥ object

对象其实就是一组数据和功能的集合。

// 创建对象的2种方法
var obj1 = new Object();
var obj2 = {};

 

二、typeof操作符

一般来说,数据的类型与该变量的typeof返回值相同,例如:

console.log(typeof "abc"); // "string"
console.log(typeof 123); // "number"
console.log(typeof true); // "boolean"

另外有一些特殊情况,具体如下:

函数的typeof返回值为"function"

对象、数组、null的typeof返回值都为"object"

另外:假如我们需要判断是否为数组,使用typeof无法判断出是对象还是数组,下面介绍几种可以判断数组的方法:

Array.isArray([]) // true(ES5的方法)
[].constructor === Array // true(使用构造函数)
[] instanceof Array // true(判断是否为Array的实例)

还有其他许多判断是否为数组的方法,在此不一一列举,有兴趣的同学可以自行查找。

 

后记

此篇内容比较基础比较简单,但是尽可能地去涉及一些细节的东西,后续难度会慢慢提升。

posted @ 2020-03-12 16:58  闻远大叔  阅读(206)  评论(0编辑  收藏  举报