判断对象属性的几种方法

function Person() {
     this.name = ‘Lee‘;
     this.age = 20;
     this.sayName = function() {console.log(this.name)};
}
Person.prototype.height = 180;
var p = new Person();

判断属性

hasOwnProperty(property_name)

检测一个属性书否存在于实例中,如果是则返回true

p.hasOwnProperty("name");       // true
p.hasOwnProperty("height");     // false

in

能够通过对象访问给定属性时返回true,无论该属性存在于实例中还是原型中。

"name" in p;       // true
"height" in p;     // true

获取属性

获取所有可枚举属性

for-in

返回所有能够通过对象访问的、可枚举的属性,其中既包括存在于实例中的属性,也包括存在于原型中的属性。

覆盖原型属性的自定义属性也将返回,不论是否标记为可枚举。

for(var i in p) {
    console.log(i);
}
// name
// age
// sayName
// height

获取实例属性

Object.keys()

接收一个对象做参数,返回一个包含所有可枚举的实例属性的字符串数组。

Object.keys(p);     //  ["name", "age", "sayName"]

Object.getOwnPropertyNames()

接收一个对象为参数,获取对象所有实例属性的字符串数组 ,无论它是否可枚举。

Object.getOwnPropertyNames(p);      // ["name", "age", "sayName"]

原型属性

JavaScript中没有单独判断和获取对象原型属性的方法,但是我们可以通过前面的方法组合实现。

判断原型属性

通过组合hasOwnProperty()方法和in操作符,就可以区分该属性是否存在于原型中。

function hasOwnPrototype(obj, name) {
     return !obj.hasOwnProperty(name) && (name in obj);
}
hasOwnPrototype(p, "name");      // false
hasOwnPrototype(p, "height");     // true

获取原型属性

通过组合for-in循环与hasOwnProperty()方法输出对象的原型属性。

for(var i in p) {
     !p.hasOwnProperty(i) && console.log(i);
}
// height

通过在原型对象上执行for-in循环。

for(var i in Person.prototype) {
    console.log(i);
}
// height

通过传递对象原型做参数给Object.keys()方法。

Object.keys(Person.prototype);     // ["height"]

总结

实例属性

判断实例属性使用对象的hasOwnProperty()方法。或取对象实例属性使用Object.keys()Object.getOwnPropertyNames()方法。

  1. hasOwnProperty(), 判断某个属性是否是对象的实例属性。
  2. Object.keys(),获取对象所有可枚举的实例属性。
  3. Object.getOwnPropertyNames(),获取所有的实例属性。

实例属性和原型属性

使用in操作符判断某个属性是否存在于对象的实例或原型中。使用for-in循环输出对象所有可枚举的实例属性与原型属性。

  1. in
  2. for-in

原型属性

通过组合hasOwnProperty()方法和in操作符,区分原型属性。通过传递对象原型给for-in循环或Object.keys()方法获取原型属性。

  1. hasOwnProperty() + in
  2. for(var i in Obj.prototype)
  3. Object.keys(Obj.prototype)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-12 12:04:51

判断对象属性的几种方法的相关文章

JS访问对象属性的两种方法

var person = { name: "nick" }; console.log(person["name"]); // "nick"; console.log(person.name); // "nick"; 两种方法优缺点:方括号法可以通过变量访问对象的属性,而点表示法不可以: 方括号法必须加双引号,可以是任何字符串: 原文地址:https://www.cnblogs.com/cloudbarrychen/p/1131

JS中遍历对象属性的四种方法

Object.keys().Object.values().Object.entries().for...in.Map (1)Object.keys(): let ex1 = {c1: 'white',c2: 'black'} let ex2 = {c3: 'green',c4: 'yellow'} Object.setPrototypeOf(ex1 ,ex2 ):Obejct.keys(ex2 ) === ['c3','c4']           ex2['c3'] === 'green'

js+jquery动态设置/增加/删除/获取元素属性的两种方法集锦对比(动态onclick属性设置+动态title设置)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html140/strict.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>

在JavaScript中判断整型的N种方法

整数类型(Integer)在JavaScript经常会导致一些奇怪的问题.在ECMAScript的规范中,他们只存在于概念中: 所有的数字都是浮点数,并且整数只是没有一组没有小数的数字. 在这篇博客中,我会解释如何去检查某个值是否为整型. ECMAScript 5 在ES5中有很多方法你可以使用.有时侯,你可能想用自己的方法:一个isInteger(x)的函数,如果是整型返回true,否则返回false. 让我们看看一些例子. 通过余数检查 你可以使用余数运算(%),将一个数字按1求余,看看余数

二维矢量图形对象拾取的一种方法

二维矢量图形对象的拾取在矢量绘图软件中是一个常用的操作,非精准的拾取很容易实现,直接计算Geometry的Bound即可,但是这样做未免有点太粗糙了,显得好没专业水准!要体现出专业的绘图水准,我们必须做到精准的拾取.这里介绍一种采用Geos缓冲分析和gdi区域结合的方法.这里只介绍多边形的精准拾取. 首先定义以下这里精准拾取的含义,所谓精准拾取,也就是只有在鼠标点击图形覆盖到的屏幕像素范围时才算作有效的拾取:如下图 只有点击到红色的区域时,才算拾取到该图形.因此我们考虑到Pen的宽度和样式,特别

php变量判断为空的几种方法

1.isset  主要用来判断变量是否被初始化过 注意:当使用isset来判断数组元素是否被初始化过时,它的效率比array_key_exists高4倍左右 2.empty  可以将值为 "假"."空"."0"."NULL"."未初始化" 的变量都判断为TRUE 3. is_null  仅把值为 "NULL" 的变量判断为TRUE 4.var == null  把值为 "假&q

JavaScript定义对象的2代码种风格和对象属性有两种寻址方式

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

WPF编程,通过Double Animation动态更改控件属性的一种方法。

原文:WPF编程,通过Double Animation动态更改控件属性的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/details/87251422 DoubleAnimation类指定起始值(From="30").终点值(To="300").时间(Duration="3"),以及动画结束应该如何(FillBehavior="Stop&qu

WPF编程,通过【帧】动态更改控件属性的一种方法。

原文:WPF编程,通过[帧]动态更改控件属性的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/details/87249998 WPF提供了一种基于帧的动画实现方式,由CompositionTarget类来完成. WPF会在每次界面刷新时调用该回调函数. CompositionTarget的刷新率与窗体保持一致,因此很难人工控制动画的快慢. ?1.前台 <Grid> <Grid.RowDefin