js判断对象的几种方法

JavaScript011

js判断对象的几种方法,第1张

1、for in 循环

eg:var obj = {}

        var b = function () {

            for (var key in obj) {

                return false

            }

            return true

        }

        console.log(b())  // true

2、对象序列化(将对象转换为字符串)后进行判断

eg:var data = {}

        var b = (JSON.stringify(data) == "{}")

        console.log(b)  // true

3、jquery的isEmptyObject()方法

eg:  var data = {}

        var b = $.isEmptyObject(data)

        console.log(b)  // true

4、Object.getOwnPropertyNames()方法

eg:  var data = {}

        var arr = Object.getOwnPropertyNames(data)

        console.log(arr.length == 0)  // true

5、ES6中的Object.keys()方法

eg:  var data = {}

        var arr = Object.keys(data)

        console.log(arr.length == 0)  // true

更多内容,请访问我的 个人博客 。

该方法可以判断对象的自有属性和继承来的属性是否存在。

该方法只能判断自有属性是否存在,对于继承属性会返回false。

自有属性和继承属性均可判断。

该方法存在一个问题,如果属性的值就是undefined的话,该方法不能返回想要的结果,如下:

分别是普通对象,数组对象和日期对象

用双下划线proto获取对象的原型对象再与数组的原型对象作比较,返回ture为数组,false则不是

翻译成人话就是数组的原型对象是obj1的原型对象么,会返回一个布尔值,

与以上两种方法相同,返回ture为数组,false则不是

对象会继承原型对象的constructor 属性,所以可以用此属性找到对象的构造函数

再根据构造函数来判断是否该对象为数组对象

所以new出来的obj2则为Array(数组对象)的一个实例

所以可以用instanceof 实例进行判断

因为前几种方式都存在一定的缺陷

比如

则在控制台查看obj1都会是ture

而第六种则不会,在每个对象创建时都会有一个隐藏的值类型,用对象名加点访问不到

Object对象和它的原型链上各自有一个toString()方法,第一个返回的是一个函数,第二个返回的是值类型。

所以任何对象可以使用call()去使用Object.toString的函数

只要跟输出结果相比较就可以得出布尔值

直接返回布尔值,不用加等号