【JavaScript笔记(二)】还不能脱口而出JS的数据类型?!?你需要收藏这篇详细教程

这一章节的学习更推荐大家使用——node.js的交互环境

  • 直接输入:node即可进入;
  • 输入表达式会返回整个表达式的值;输入变量名会返回变量的值;输入typeof 变量名可快速检测类型;(很方便去测试)
  • 按两次Ctrl + C退出;

在这里插入图片描述

一. 基本数据类型

JS中共有五种基本数据类型:Number,String,Boolean,Null,undefined。基本数据类型以类似键值对的形式保存在栈区:

// 变量名称 = 存储的数据(值);
var a = 1;
var b = true;
var name = 'zevin';

在这里插入图片描述

1.1 Number

var a = 2;
var a = 2.2;
var a = 0x10;
var a = 010;

数字有很多类型,按照数字精度可以分为整数(int),单精度(float),双精度(double ),按照数字的表示方法可以分为二进制(Binary),八进制(Octal),十进制(decimal system),十六进制(Hexadecimal)。但是在Js中,所有的数字统一使用Number来表示。
(体现JS弱类型语言特点:类型细分不明显)

typeof a ;//输出'number'

特殊拓展:

  1. NaN(Not a Number)
var a = 10 / 'b'; //计算错误,结果不是一个数字
console.log(a); //输出:NaN
typeof a; // 输出:number
  1. 无穷大(Infinity / -Infinity)
var a = 10/0;
var b = -10/0;
console.log(a); //输出:Infinity
console.log(b); //输出:-Infinity

1.2 String

字符串类型,该类型表示由零个或者多个16位Unicode字符组成的字符序列,即字符串。通常用单引号 / 双引号 / 反引号括起来,或者结合嵌套使用。

var a = "hello world";//双引号
var a = 'hello world';//单引号
var a = `
     hello world
` ;//反引号(会打印出换行)  
var json = '{"name":"zevin","age":21}';//单双引号交替使用

分别的输出结果为:

hello world
hello world

  hello world

{"name":"zevin","age":21}

上述第四种写法后期可以解析输出成对象:

扫描二维码关注公众号,回复: 11547226 查看本文章
console.log(JSON.parse(json)); 

输出:{"name":"zevin","age":21}//对象会有高亮显示

1.3 Boolean

布尔类型,取值为true / false,通常用于条件判断。

var  a = true;
var  a = false;

1.4 Null

空引用数据类型。当前a变量为空对象(没有对象,而不是 0 ),将来可能会保存一个对象。

var a = null;

还有一个注意的点:
当我们用typeof检测a时,输出的结果是'object',而不是'null'。那么问题来了,我们为什么不把null归到对象里?

当然从这个角度来看是可以归为对象的。之所以没归,是因为null不能调用对象的任何属性和方法。
我们可以再写一个标准对象格式的空对象:

var a = {};
a.toString();//调用对象的toString()方法

输出:'[object Object]'

1.5 undefined

未定义类型。该类型只有一个值undefined。对未声明未初始化的变量执行typeof操作符都返回undefined

var a ; 
var a = "undefined";

这两种声明形式用typeof检测结果都为'undefined'。,但是实际上没有必要把一个变量的值显式设置为undefined

还可以再拓展一点:
undefined类型和null类型的比较:(实际上 undefined 派生自null值)

var a;
var b = null;
a == b  //结果为ture(==先转换类型再比较值)
a === b  //结果为false(===先判断类型后判断值)

二. 引用数据类型

(本文中只是简单介绍,后续会专门单篇介绍三大引用数据类型)
在JS中除了以上基本数据类型之外的其他所有类型都可以归结为引用数据类型。变量的引用地址保存在栈区,真正的值保存在堆区。
比如:d变量为对象类型,真正的值保存在堆区的一块引用地址为B001的内存中,在栈区保存的就是引用地址B001

var d = {name:"zevin",age:"21"};

在这里插入图片描述

2.1 对象

对象是模拟现实生活的对象,对象由键值对组成,通过使用大括号将所有键值对括起来。

var a = {name:"zevin",age:"21"};

2.2 数组

数组是一个特殊的对象,包含了多个值,值与值之间使用逗号分隔开,所有的值通过中括号括起来。

var array = [5,2,0];

2.3 函数

函数是代码执行单元,用于实现某些特殊的功能。

function add(a,b){ 
    return a + b; 
}

三. 数据类型检测

3.1 typeof

虽然之前都用过很多次了,这里我再总结一下,有几个点要注意:

  1. NaN的数据类型是"number";
  2. 数组的数据类型是"object";
  3. 日期的数据类型是"object";
typeof "zevin"                 // 返回 "string"

typeof 3.14                   // 返回 "number"

typeof NaN                    // 返回 "number"

typeof false                  // 返回 "boolean"

typeof [1,2,3,4]              // 返回 "object"

typeof {name:'zevin', age:21}  // 返回 "object"

typeof new Date()             // 返回 "object"

typeof function () {}         // 返回 "function"

typeof a                  // 返回 "undefined" 

typeof null                   // 返回 "object"

3.2 isNaN

判断是否不是一个数字,不是数字,即为NaN,输出true。

var a = 10/'a';
console.log(a); //输出:NaN
console.log(typeof a); //输出:number
console.log(isNaN(a)); //输出:true

3.3 isFinite

判断是否是有效的数字,无穷就属于无效的数字。

var a = 10/0;
console.log(a); //输出:Infinity
console.log(typeof a); //输出:number
console.log(isFinite(a)); //输出:false

四. 数据类型转换

4.1 其他类型 --> Number

4.1.1 Number()

Number()函数也可以用来执行数据类型转换。

Number("123")  // 123
Number("1.2222")  // 1.2222
Number(null)  // 0
Number('')  // 0

Number('12asva')  // NaN
Number('zevin')  // NaN

Number()函数在对于null''空对象和有非数字字符的字符串的转换和parseInt()函数是有区别的。

4.1.2 pasrseInt()

parseInt()函数可以将给定的字符串(string)以指定的基数(radix)解析为整数。
语法为:parseInt(string,radix)
第二个参数(radix)表示使用什么进制进行解析,当不指定第二个参数时,会默认以十进制解析字符串。当然我们可以指定二进制,八进制或者十六进制等等。

pasrseInt("123")      // 123
pasrseInt("1.2222")      // 1
pasrseInt(null)      // NaN
pasrseInt('')      // NaN

parseInt("19",10);   //19 (10+9)
parseInt("11",2);    // 3 (2+1)
parseInt("17",8);    // 15 (8+7)
parseInt("1f",16);   // 31 (16+15)

parseInt()函数从头解析string为整数,在遇到不能解析的字符时就返回已经解析的整数部分,如果第一个字符就不能解析,就直接返回NaN。

pasrseInt("abc123")   // NaN
pasrseInt("123abc")   // 123
pasrseInt(false)     // NaN

4.1.3 一元加( + )/ 减( - )运算符

+3  // 3
+true  // 1
+'2'  // 1
+'a'  // NaN
+null  // 0
+undefined  // NaN
+[] // 0
+{} // NaN
-3  // -3
-true  // -1
-'2'  // -2
-'a'  // NaN
-null  // -0
-undefined  // NaN
-[] // -0
-{} // NaN

4.2 其他类型 --> String

4.2.1 String()

String(123)  // '123'
String(false)  // 'false'

4.2.2 toString()

false.toString()  // 'false'

4.2.3 加( + )算数运算符

这个在下一篇中会详细讲解,现在你只需要知道,如果加运算的操作数中出现了字符串,那么加运算就执行的是字符串拼接运算。所以,我们可以在其他数据类型后加上一个空的字符串,就可以把它转换成字符类型。

123 + " "  // '123'

4.3 其他类型 --> Boolean

4.3.1 Boolean()

Boolean('zevin')     // true
Boolean(-123)        // true
Boolean(null)        // false

4.3.2 非( ! )运算符

var a;     // undefined
!a         // true
!!'hello'  // true
!123       // false
!null      // true

猜你喜欢

转载自blog.csdn.net/JZevin/article/details/107714683