js中的数据类型及判断

JS中的七大数据类型

  1. 五种基本数据类型:String、Boolean、Number、Undefined、Null
  2. 一种复杂数据类型:Object
  3. ES6语法中新增的Symbol

js中三大引用类型:Object、Array、Function

判断数据的类型

type of

type of是一个一元运算,放在一个运算数之前,运算数可以是任意类型。
它返回值是一个字符串,该字符串说明运算数的类型。,typeof一般只能返回如下几个结果(6)

StringBooleanNumberUndefinedObjectFunction


函数不是数据类型,但是调用typeof后为什么会出现function类型呢。从技术的角度看,函数是对象。但是也有一些特殊的属性,因此利用typeof来区分函数和对象是有必要的。


对于Array, Null,DOM对象等特殊对象使用typeof一律返回object,这正是typeof的局限性。


用法:

  1. 可以使用 typeof 来获取一个变量是否存在
 if(typeof a!="undefined"){
 	alert("ok")
 }
 //而不要去使用 if(a) 因为如果 a 不存在(未声明)则会出错
  1. 判断基本数据类型和function

对于 Array,Null 等特殊对象使用 typeof 一律返回 object,这正是 typeof 的局限性。无论引用的是什么类型的对象,它都返回 “object”。这就需要用到instanceof来检测某个对象是不是另一个对象的实例。

instance of

用于判断一个变量是否某个对象的实例

官方语言:用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。

语法: object instanceof constructor
参数:

object(要检测的对象.)
constructor(某个构造函数)

描述:

instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。

用法一:instanceof 用于判断一个变量是否某个对象的实例

var a=new Array();

alert(a instanceof Array); // true,

 alert(a instanceof Object) //也会返回 true;

//这是因为 Array 是 object 的子类。

function test(){};

var a=new test();

alert(a instanceof test) //会返回true

用法二: instanceof 可以在继承关系中用来判断一个实例是否属于它的父类型。

function Foo(){} 
Foo.prototype = new Aoo();//JavaScript 原型继承 
var foo = new Foo(); 
console.log(foo instanceof Foo)//true 
console.log(foo instanceof Aoo)//true

上面的代码中是判断了一层继承关系中的父类,在多层继承关系中,instanceof 运算符同样适用。

console.log(Object instanceof Object);//true 
console.log(Function instanceof Function);//true 
console.log(Function instanceof Object);//true  
console.log(Foo instanceof Function);//true 

console.log(Number instanceof Number);//false 
console.log(String instanceof String);//false  
console.log(Foo instanceof Foo);//false

需要注意的是,如果表达式 obj instanceof Foo 返回true,则并不意味着该表达式会永远返回ture,因为Foo.prototype属性的值有可能会改变,改变之后的值很有可能不存在于obj的原型链上,这时原表达式的值就会成为false。另外一种情况下,原表达式的值也会改变,就是改变对象obj的原型链的情况,虽然在目前的ES规范中,我们只能读取对象的原型而不能改变它,但借助于非标准的__proto__属性,是可以实现的。比如执行obj.proto = {}之后,obj instanceof Foo就会返回false了。

Object.prototype.toString.call()

使用Object.prototype上的原生toString()方法判断数据类型,使用方法如下:`Object.prototype.toString.call(value)

1.判断基本类型:

Object.prototype.toString.call(“abc”);//”[object String]”
Object.prototype.toString.call(true);//”[object Boolean]”
Object.prototype.toString.call(123);//”[object Number]”
Object.prototype.toString.call(undefined);//”[object Undefined]”
Object.prototype.toString.call(null);//”[object Null]”

2.判断原生引用类型: `

//函数类型
Function fn(){console.log(“test”);}
Object.prototype.toString.call(fn);//”[object Function]”
//日期类型
var date = new Date();
Object.prototype.toString.call(date);//”[object Date]”
//数组类型
var arr = [1,2,3];
Object.prototype.toString.call(arr);//”[object Array]”
//正则表达式
var reg = /[hbc]at/gi;
Object.prototype.toString.call(arr);//”[object RegExp]”
//自定义类型
function Person(name, age) {
    this.name = name;
    this.age = age;
}
var person = new Person("Rose", 18);
Object.prototype.toString.call(person); //”[object Object]”
/**很明显这种方法不能准确判断person是Person类的实例,而只能用instanceof 操作符来进行判断,如下所示:
**/
console.log(person instanceof Person);//输出结果为true

3.判断原生JSON对象:`

var isNativeJSON = window.JSON && Object.prototype.toString.call(JSON);
console.log(isNativeJSON);//输出结果为”[object JSON]”说明JSON是原生的,否则不是

js中的数据类型的转换

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值