Dean Front-end Dev Engineer

JS 数据类型的判断方法


简介

JavaScript 有 6 种数据类型。其中 5 基本数据类型,1 种引用类型。

基本数据类型:number、string、boolean、undefined、null

引用类型:object

boolean

后面列出的值会被当作假:false、null、undefined、空字符串’‘、0、数字NaN。其他所有值都被当作真。

在做相等比较时,最好只用 === 和 !==

undefined

  • 变量被声明了,但没有赋值,就等于 undefined。
  • 调用函数时,应该提供的参数没有提供,该参数等于 undefined。

  • 对象没有赋值的属性,该属性的值为 undefined。
  • 函数没有返回值时,默认返回 undefined。

判断数据类型的方法

  • typeof 操作符,用于判断 number,string,boolean,undefined,function

  • instanceof 运算符,用于判断对象,a instanceof b,a 是否是 b 的一个实例,会判断原型链,多框架有时不适用。

  • isPrototypeof(instrance),区别于instanceof,就是当用 Object.create() 来创建新实例,又没有重新制定 constructors 时,instanceof 会出错,而这时照样可以用 isPrototypeof()

    var A = {
     //something
    }
    var B = Object.create(A);
    var C = Object.create(B);
    
    console.log(A.isPrototypeOf(C));  // true
    console.log(C instanceof A);      //TypeError
    
  • hasOwnProperty() 方法,是否是自己的实例,不判断原型链

  • Array.isArray(arr);用于判断 arr 是否为数组;(ie9+)

  • Object.prototype.toString.call(obj) ;返回 [Object class],class 是 obj 的数据类型,这个可用于判断对象的数据类型,例如 arr 是一个数组。跨框架可用。

    Object.prototype.toString.call(arr);// [object Array]
    

小结

  • 不要使用new Number()new Boolean()new String()创建包装对象;
  • parseInt()parseFloat()来转换任意类型到number
  • String()来转换任意类型到string,或者直接调用某个对象的toString()方法;(null和undefined没有toString方法)
  • 通常不必把任意类型转换为boolean再判断,因为可以直接写if (myVar) {...}
  • typeof操作符可以判断出numberbooleanstringfunctionundefined
  • 判断Array要使用Array.isArray(arr)
  • 判断null请使用myVar === null
  • 判断某个全局变量是否存在用typeof window.myVar === 'undefined'
  • 函数内部判断某个变量是否存在用typeof myVar === 'undefined'

number对象调用toString()报SyntaxError

123.toString(); // SyntaxError
123..toString(); // '123', 注意是两个点!
(123).toString(); // '123'

Similar Posts

Comments