美文网首页我爱编程
js的数据类型以及判断方法

js的数据类型以及判断方法

作者: 枫树林 | 来源:发表于2018-04-12 19:57 被阅读0次

最新的ECMAScript 标准定义了 7 种数据类型 :

  • 6 种原始类型 String、Number、Boolean、Null、Undefined、Symbol;1 种复杂的Object类型

原始类型:

字符串类型(String):

声明方式

var a = new String("123")  //  不推荐使用
// or
var a = "123" 

区别:

var a = new String("123"), a1 = new String("123") // 类型为Object
a == a1 // false
//使用new关键字的创建的是字符串对象,是放到堆栈里面的

var a = "123", a1 = "123" // 类型为String
a == a1 // true
//直接赋值的操作是创建了一个常量,放到常量池里面的,
数字类型(Number)

声明方式和区别跟字符串一样;

NaN非数字: 任何涉及到NaN的运算都会返回NaN、NaN不等于NaN;
isNaN()是用来判断是否是非数字 eq:

isNaN(123) // false
isNaN("123") // false
isNaN("hello") // true
布尔类型(Boolean)

表示一个逻辑实体,只有true 和 false两个值

Undefined类型(Undefined)

只有一个值undefined ;使用 var 和 let 声明了变量但未初始化值的时候,这个变量的值就是undefined

Null类型(null)

空指针对象,特指对象的值未设置

符号类型(Symbol)

符号(Symbols)是ECMAScript 第6版新定义的。符号类型是唯一的并且是不可修改的, 并且也可以用来作为Object的key的值

对象(Object)

对象是指内存中的可以被 标识符引用的一块区域; 就是引用类型

"标准的对象"

常用的就是Object实例化的对象
声明方式:

//使用new操作符和Object构造函数
var a = new Object; // 如果不传参数()可以省略
a.name = "张三"

//or对象字面量语法
var a = {
    “name”: "张三"
}

数组(Array)

声明方式:

var a = new Array(4) // 创建占据4个位置的空数组
a.length // 4

var a = new Array() // 创建一个空的数组
a.length // 0

var a = [], a = [12, 23, 34]
函数(function)

函数是一个附带可被调用功能的常规对象。

日期(Date)

创建本地时间的对象

js判断数据类型的方法

typeof 方法

注意:这个方法返回的都是字符串

let und;
let sym = Symbol("this is Symbol");
let date = new Date();
function name(){
    //code
}

typeof  "123" // "string"
typeof 123 // "number"
typeof und // "undefined"
typeof undefined // "undefined"
typeof true // "boolean"
typeof sym // "symbol"
typeof Symbol() // "symbol"
typeof name // "function"

typeof null // "object"
typeof [] // "object"
typeof {} // "object"
typeof date // "object"
instanceof 方法

用来判断已知是object类型的方法

var func = function () {
      // code....
}
var date = new Date();

[] instanceof Array // true
func instanceof Function // true
date instanceof Date // true
{} instanceof Object // true
[] instanceof Object // true   这就尴尬了。。。
对象上的toString方法 (适用与所有情况)

返回的是字符串

var getType = Object.prototype.toString

var func = function() { // code... } 
var sym = Symbol("this is symbol")
var date = new Date()

getType.call("aaa") // "[object String]"
getType.call(123) // "[object Number]"
getType.call(undefined) // "[object Undefined]"
getType.call(true) // "[object Boolean]"
getType.call(sym) // "[object Symbol]"
getType.call(null) // "[object Null]"

getType.call(func) // "[object Function]"
getType.call([1, 2, 3]) // "[object Array]"
getType.call(date) // "[object Date]"
getType.call({}) // "[object Object]"

可以封装成方法

var getType = Object.prototype.toString;
var judgeType = {
    isNull (e) {
        return getType.call(e) == "[object Null]";
    },
    isArray (e) {
        return getType.call(e) == "[object Array]";
    },
    isString (e) {
        return getType.call(e) == "[object String]";
    },
    isNumber (e) {
        return getType.call(e) == "[object Number]";
    },
    isSymbol (e) {
        return getType.call(e) == "[object Symbol]";
    },
    //......
}

相关文章

网友评论

    本文标题:js的数据类型以及判断方法

    本文链接:https://www.haomeiwen.com/subject/ytaahftx.html