JavaScript的数据类型
JavaScript是弱类型脚本语言,声明变量时无需指定变量的数据类型。JavaScript变量的数据类型是解释时动态决定的。有以下两种数据类型
1.基本数据类型
基本数据类型又分为以下六种:
-
Undefined
Undefined类型只有一个值,即特殊的undefined,在使用var声明变量但未对其加以初始化时(未赋值),这个变量的值就是undefined. -
Null
Null 类型是第二个只有一个值的数据类型,这个特殊的值是null。
null 值表示一个变量以后可能会指向某个对象,但目前什么都没有指向
eg: var car = null;
alert(typeof car);//“object”
从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null值时会返回“object”的原因。
alert(null == undefined);//true -
Boolean
布尔类型,仅有两个值:true和false,也代表1和0,实际运算中true == 1,false == 0
快速转换为Boolean类型:在前面加两个!! -
Number
数值类型,NaN(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数字的情况。
isNaN()函数,这个函数接受一个参数,该参数可以是任何类型,而函数会帮我们确定这个参数是否“不是数字”。并返回一个Boolean值。
快速转换Number类型:在前面加一个 + -
String
字符串类型
在强类型语言中 一般字符 和 字符串是两种不同的类型// 字符 指的是单个字符 'a' char // 字符串 指的是多个字符 "abc" string // JS中 不管是 单个还是多个字符 都叫string // 字符串可以是单引号 也可以是双引号 推荐使用单引号(方便HTML拼接)
快速转换为String类型:用连接符 + ’ '(连接空的字符串)
-
Symbol
ES6 引入了一种新的原始数据类型。Symbol 值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。
eg : let s = Symbol();
typeof s; // “symbol”
基本数据类型可用 typeof 检测
2.引用数据类型
*** 引用类型的比较,比较的是地址,只要地址不一样就不相等
*** 引用零类型赋值的是地址,两个数据一样
*** 引用类型作为参数传递时,依旧传递的是地址
严格来说引用类型只有一种Object。
Object(Array,Date,RegExp,Function)
- Object
对象 - Array
数组(Array),就是一种很常用的保存批量数据的数据结构,所谓数据结构,就是把数据与数据间的关系按照特定的结构来保存。
3.Function
函数(function)是一个大型程序中的某部分代码(子程序),由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。
一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。
在面向对象编程语言中,类别或对象的子程序也被称作方法(method)
- instanceof 检测引用类型,但不靠谱
console.log(arr instanceof Array); //true
console.log(obj instanceof Object); //true
console.log(arr instanceof Object); //false- construtor(构造器)–编译器不给予提示,检测该对象是否是某个构造函数创建的
console.log(arr.constructor === Array); //true
console.log(arr.constructor === Object); //false
console.log(obj.constructor === Object); //true
console.log(obj.constructor === Array); //false- 自定义函数—用于检测对象的数据类型(引用类型和基本数据类型都可)
function getType(obj) { return Object.prototype.toString.call(obj).slice(8, -1) }
var num = 123;
var b = true;
var d;
console.log(getType(num)); //Number
console.log(getType(b)); //Boolean
console.log(getType(d)); //Undefined