JavaScript中的数据类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript中的数据类型相关的知识,希望对你有一定的参考价值。

  javascript中包含五种基本数据类型(原始数据类型),分别是:undefined, null, number, boolean, string; 和一种引用类型 Object,引用类型中包含特殊的一类:Function类型。number, boolean, string三种基本类型对于有包装类型 Number,Boolean,String,这三种包装类型是对象类型。

  针对这些类型,下面分别解释:

  1. typeof 操作符

  可以通过此操作符获取变量的类型,操作返回值为字符串,如下7种:"number", "string", "boolean", "null", "undefined", "function", "object".

  2. 基本类型

  undefined 类型:只有一个值 undefined,在使用 var 声明变量但未对其进行初始化时,此变量的值即为 undefined

var sum;    // 声明后未初始化默认值为undefined
alert(sum)  // "undefined"
alert(age)  // 声明变量,报错

alert(sum == undefined)       // true
alert(typeof sum)            // "undefined"
alert(typeof age)            // "undefined"
     此处对未声明的变量进行typeof也会返回 "undefined",有其逻辑上的合理性,表示无法操作此变量

  null 类型:也是只有一个值的数据类型,值为 null,从逻辑角度来看,null表示一个空对象指针。

var title = null;

alert(typeof title);    // "object"

// 由于对赋值null的变量执行 typeof 操作会返回 object,
// 所以如果变量未来准备存放对象,最好将其赋值为 null, 
// 这样只需要检测其是否为 null,即可知道其是否已保存了一个对象的引用
if (title == null) {
     // do something
}

  number, boolean, string类型及其包装类型:

var num = 5;
var NUM = new Number(5);    // 此处创建一个Number对象
alert(typeof num);    // "number"
alert(typeof NUM);    // "object"

var numf = Number(5);
alert(typeof Number);   // "function" 此处Number是一个包装函数
alert(typeof numf);    // "number"

// boolean 和 string类型与 number相似
var bool = false;
var BOOL = new Boolean(false);
alert(typeof bool);
alert(typeof BOOL);

var str = ‘hello‘;
var STR = new String(‘hello‘);
alert(typeof str);
alert(typeof Str);

  3. NaN : 是一个特殊的数值,用于表示应该返回数值而未返回数值的情况,例如: 除0, Number("a")等

// 1.任何涉及 NaN 的操作都会返回 NaN
alert(1+NaN)    // NaN
alert(NaN/10)    // NaN

// 2.NaN与任何值都不等
alert(NaN == NaN)    // false
alert(2 == NaN)        // false
alert("abc" == NaN)    // false

// 3. isNaN()函数:不能被转换为数值的值都会返回true
alert(isNaN(5))    // false
alert(isNaN(true))    // false
alert(isNaN("a"))    // true

 

  4. 引用类型:一组数据和功能的集合。对象是引用类型的一个实例。

  [[Class]]是一个内部属性,可以用来给对象分类,它的值有: 

      "Arguments", "Array", "Boolean", "Date", "Error", "Function", "JSON", "Math", "Number", "Object", RegExp", “String"

  Javascript只能通过toString()方法(Object.prototype.toString())获取这个内部属性

Object.prototype.toString.call(undefined)       //"[object Undefined]"
Object.prototype.toString.call(null)            //"[object Null]"
Object.prototype.toString.call(function(){})    //"[object Function]"
Object.prototype.toString.call(Math)            //"[object Math]"
Object.prototype.toString.call(Array)         //"[object Function]"
Object.prototype.toString.call([])            //"[object Array]"
Object.prototype.toString.call({})            //"[object Object]"
//基础类型转化为包装类型按照对应的规则处理
Object.prototype.toString.call("abc")        //"[object String]"
Object.prototype.toString.call(200)          //"[object Number]"
Object.prototype.toString.call(true)         // "[object Boolean]"    

  可以通过如下的函数获取对象类型:

function getClass(x) {
    var str = Object.prototype.toString.call(x);
    return /^\[object (.*)\]$/.exec(str)[1];
 
}

getClass(null);      // "Null" 
getClass({})      //"Object"
getClass([])      //"Array"
getClass(JSON)    //"JSON"
getClass(function(){})//"Function"

function Foo() {}
getClass(new Foo())   //"Object"

 

以上是关于JavaScript中的数据类型的主要内容,如果未能解决你的问题,请参考以下文章

48个值得掌握的JavaScript代码片段(上)

JavaScript 代码片段

执行AJAX返回HTML片段中的JavaScript脚本

从 TypeScript 类型定义或 GraphQL 片段定义生成 JavaScript 空对象

你可能不知道的JavaScript代码片段和技巧(下)

你可能不知道的JavaScript代码片段和技巧(上)