一个对象,想必我们关注的最多的应该是它上面的属性有哪些吧。那么,怎么判断一个对象是否具有某个属性呢?

 /*下面是一个对比,看看在判断是否包括一个键上面,Object结构和Set结构的写法不同。*/
// 对象的写法
var myObject = {
"mm": "m1",
"height": 1,
"width": 1
};
if(myObject["mm"]){
console.log(myObject["mm"]); // m1
} //最开始报错:mm is not defined, 是因为myObject["mm"]写成了myObject[mm], 没有加引号
if(myObject.width){
console.log(myObject.width); //
}
if(myObject.hasOwnProperty('height')){
console.log(myObject.height); //
} /*判断JS对象是否拥有某属性 两种方式,但稍有区别*/
//1.in运算符
console.log('mm' in myObject); // true
console.log('toString' in myObject); // true
//可看到无论是name,还是原形链上的toString,都能检测到返回true。 //2.hasOwnProperty 方法
console.log(myObject.hasOwnProperty('mm')); // true
console.log(myObject.hasOwnProperty('toString')); // false
//原型链上继承过来的属性无法通过hasOwnProperty检测到,返回false。 /*这个时候,它会输出原型的属性
在很多时候,我们不需要遍历它原型的属性,还有一个原因就是,我们现在用到的对象,
我们不能保证,其他开发人员,有没有,在它的原型上加一些属性呢?所以呢,我们就
过滤一下我们对象的属性吧,这个时候就用到了hasOwnProperty方法*/
Object.prototype.say = "hello"; // 添加到对象Object上面
for(var i in myObject){
console.log(myObject[i]); // m1 1 1 hello
}
var test = [1,2,3,4];
Array.prototype.say = "hello"; //添加到数组Array上面
for(var i in test){
console.log(test[i]); // 1 2 3 4 hello
}
//改进:
Object.prototype.say = "hello"; // 添加到对象Object上面
for(var i in myObject){
if(myObject.hasOwnProperty(i)){
console.log(myObject[i]); // m1 1 1
}
}
var test = [1,2,3,4];
Array.prototype.say = "hello"; //添加到数组Array上面
for(var i in test){
if(test.hasOwnProperty(i)){
console.log(test[i]); // 1 2 3 4
}
}
//ES6中 Set的写法
var set = new Set();
set.add("width");
set.add("height");
if(set.has("width")){
console.log(set); //Set {"width", "height"}
console.log([...set]); // ["width", "height"]
}

判断一个js对象,是否具有某个属性的更多相关文章

  1. 如何判断一个js对象是否一个DOM对象

    我们在写js代码时有时需要判断某个对象是不是DOM对象,然后再进行后续的操作,这里我给出一种兼容各大浏览器,同时又算是比较稳妥的一种方法. 要判断一个对象是否DOM对象,首先想到的无非就是它是否具有D ...

  2. 如何判断一个js对象是否是Array

    经常遇到一个问题,判断某个对象是否为数组类型,在Js中检测对象类型的常见方式有以下: typeof操作符 对于Function.String.Number.Undefined等几种类型的对象来说,几乎 ...

  3. 判断一个js对象是否是Array

    今天在做题时遇到这个问题,找答案的时候,发现评论里大神好多 . 在开发中,我们经常需要判断某个对象是否为数组类型,总结判断某个对象是否是数组的方法. 1.typeof 操作符 对于Function, ...

  4. 如何判断一个js对象是不是Array

    1. instance of 2.constructor 3. isArray 1.var a=new Array(); a instanceof Array; //true 2.var a=new ...

  5. 判断一个js对象是不是数组

    //今天突然想到一个问题,如何判断一个对象是不是数组 var arr = [0, 1, 2]; console.log(arr) //object, 显然不行 //查阅了很多资料,发现几个挺不错的方法 ...

  6. 判断JS对象是否拥有某属性的方法举例

    判断JS对象是否拥有某属性 JS是否拥有某属性的判断方法,这里提供两种方式,供大家参考. 1.in 运算符 var obj = {name:'jack'}; alert('name' in obj); ...

  7. 如何判断一个C++对象是否在堆栈上(通过VirtualQuery这个API来获取堆栈的起始地址,然后就可以得到答案了),附许多精彩评论

      昨天有人在QQ群里问到如何判断一个C++对象是否在堆栈上, 我在网上搜索了下, 搜到这个么一个CSDN的帖子http://topic.csdn.net/t/20060124/10/4532966. ...

  8. DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢,而是说操作了这个对象后,会触发一些浏览器行为(转)

    一直都听说DOM很慢,要尽量少的去操作DOM,于是就想进一步去探究下为什么大家都会这样说,在网上学习了一些资料,这边整理出来. 首先,DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢 ...

  9. Java判断一个类里是否存在某个属性

    Java判断一个类里是否存在某个属性 测试pojo类,比方我有个User类 @Getter @Setter public class User { private Long id; private S ...

随机推荐

  1. 登录模块需要用到session留底

    <% HttpSession sessions=request.getSession(); Object sessionValues=sessions.getAttribute("ui ...

  2. Linq101-Set

    using System; using System.Collections.Generic; using System.Linq; namespace Linq101 { class Set { / ...

  3. My.Ioc 代码示例——使用条件绑定和元数据(可选)构建插件树

    本文旨在通过创建一棵插件树来演示条件绑定和元数据的用法. 说“插件树”也许不大妥当,因为在一般观念中,谈到插件树,我们很容易会想到 Winform/Wpf 中的菜单.举例来说,如果要在 Winform ...

  4. ExecuteScalar 要求已打开且可用的 Connection。连接的当前状态为已关闭。

    本人遇到的一个小问题,希望能帮助大家 出现这个问题就是在此操作之前已经被的程序关闭了连接,比如在执行这块代码之前不幸执行了存储过程..,就会导致这个问题发生

  5. (转) dedecms中自定义数据模型

    刚学习完dedecms的标签语法,我有很多困惑,觉得标签的意义比较抽象,不知道如何用标签来写一些具体的内容.如果有一些数据库的编程经验,就知道一个很常用的编程范例—增删改查.比如说,我要建立的是书本的 ...

  6. Ajax的工作流程简述

    提到Ajax相信我们都不会陌生,不管你是前端开发还是后台数据处理的程序员,ajax的作用就像现在生活中的手机一样,无论是作用还是流程都差不多,这里我们要进行ajax操作后台数据并显示在页面上的话,首先 ...

  7. [转载]delete指针之后应该赋值NULL

    首先,C++标准规定:delete空指针是合法的,没有副作用.但是,delete p后,只是释放了指针指向的内存空间.p并不会自动被置为NULL,而且指针还在,同时还指向了之前的地址. 问题来了,对一 ...

  8. cocos2d-x 实现粒子飞行特效

    效果图 说明 实现效果: 按下鼠标并且移动, 所到之处产生光圈 光圈会以窗口中心为终点, 并且会偏移自身角度对准终点, 然后持续飞行, 直到终点. 附件 下载源码, 请猛击这里!

  9. 关于#include后面<>和" "的区别

    1.以尖括号制定头文件,如下所示: #include <stdio.h> 用尖括号来制定文件时,预处理器是以特定的方式来寻找文件,一般是环境中或编译器命令行指定的某种寻找路径.这种设置寻找 ...

  10. 你好,C++(7)第三部分 C++世界众生相 3.2.1 变量的定义与初始化

    第3部分 C++世界众生相 在听过了HelloWorld.exe的自我介绍,完成了与C++世界的第一次亲密接触后,大家是不是都急不可待地想要一试身手,开始编写C++程序了呢?程序的两大任务是描述数据和 ...