Js类型判断方法及如何获取和判断属性

JS的类型

基本类型:bigInt,number,string,boolen,symbol,undefined,null
复杂数据类型:object,Array,Function,内置对象

如何判断

1. typeof判断(最常用)

function func(){
    console.log("js类型判断方法");
}
console.log(typeof 1); //number
console.log(typeof 'a'); //string
console.log(typeof true); //boolean
console.log(typeof undefined); //undefined
console.log(typeof Symbol());//symbol
console.log(typeof 42n); //bigint
console.log(typeof null); //object
console.log(typeof  NaN); //number
console.log(typeof({a:1})); //object
console.log(typeof [1,3]); //object
console.log(typeof func); //function
console.log(typeof(new Date)); //object

判断一个变量是否被声明可以用(typeof 变量 === ‘undefined’)来判断
typeof可以判断基本数据类型,但是难以判断除了函数以外的复杂数据类型

2. instanceof

语法:obj instanceof Object
obj:要判断的内容
Object:类型

只能用来判断复杂数据类型
instanceof 是用于检测构造函数(右边)的 prototype 属性是否出现在某个实例对象(左边)的原型链上

console.log([1,2] instanceof Array); //true
console.log(func instanceof Function); //true
console.log({a:1} instanceof Object ); //true
console.log(new Date instanceof Date); //true

3. object.property.toString.call

// 基本数据类型
console.log(Object.prototype.toString.call(999)); //[object Number]
console.log(Object.prototype.toString.call('')); //[object String]
console.log(Object.prototype.toString.call(Symbol())); //[object Symbol]
console.log(Object.prototype.toString.call(42n));//[object BigInt]
console.log(Object.prototype.toString.call(null));//[object Null]
console.log(Object.prototype.toString.call(undefined)); //[object Undefined]
console.log(Object.prototype.toString.call(true));//[object Boolean]
// 复杂数据类型
console.log(Object.prototype.toString.call({a:1})); //[object Object]
console.log(Object.prototype.toString.call([1,2])); //[object Array]
console.log(Object.prototype.toString.call(new Date)); //[object Date]
console.log(Object.prototype.toString.call(func)); //[object Function]

如何判断属性是自有属性

Object的hasOwnProperty()方法返回一个布尔值,判断对象是否包含特定的自身(非继承)属性.
什么是自由属性?什么是继承属性?
例子:

function F() {  //自定义数据类型
    this.name = "自有属性";
}
F.prototype.name = "继承属性";

  在上面例子中,this.name就表示对象的自有属性,原型对象中的name属性就是继承属性
语法:

object.hasOwnProperty(propertyName);

参数说明:propertyName 参数表示要检测的属性名称。
返回值:返回一个布尔值。如果 propertyName 是自有属性,那么返回 true,否则返回 false。
示例1:
针对上面的自定义类型,可以实例化对象,然后判定当前对象调用的属性 name 是什么类型。

let f = new F(); //实例话对象
console.log(f.hasOwnProperty("name")); // true
console.log(f.name); //自有属性

凡是构造函数的原型属性(原型对象包含的属性),都是继承属性,使用 hasOwnProperty()方法检测时,都会返回false。但是,对于原型对象本身来说,这些原型属性又是原型对象的自有属性,所以返回值又是true
示例2:

let d = Date;
console.log(d.hasOwnProperty("toString"));  //false
let  dd = Date.prototype;
console.log(dd.hasOwnProperty("toString"));  //true

toString()方法对于Date对象来说是继承属性,但是对于Date 构造函数的原型对象来说,则是它的自有属性
注意: hasOwnProperty() 方法只能判断指定对象中是否包含指定名称的属性,无法检查对象原型链中是否包含某个属性,所以能够检测出来的属性必须是对象成员。
示例3:
演示hasOwnProperty()方法所能检测的属性范围。

var o = {  //对象直接量
    o1 : {  //子对象直接量
        o2 : {  //孙子对象直接量
            name : 1  //孙子对象直接量的属性
        }
    }
};

console.log(o.hasOwnProperty("o1"));  //返回true,说明o1是o的自有属性
console.log(o.hasOwnProperty("o2"));  //返回false,说明o2不是o的自有属性
console.log(o.o1.hasOwnProperty("o2"));  //返回true,说明o2是o1的自有属性
console.log(o.o1.hasOwnProperty("name"));  //返回false,说明name不是o1的自有属性
console.log(o.o1.hasOwnProperty("name"));  //返回true,说明name不是o2的自有属性
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值