判断一个js对象,是否具有某个属性
一个对象,想必我们关注的最多的应该是它上面的属性有哪些吧。那么,怎么判断一个对象是否具有某个属性呢?
/*下面是一个对比,看看在判断是否包括一个键上面,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对象,是否具有某个属性的更多相关文章
- 如何判断一个js对象是否一个DOM对象
我们在写js代码时有时需要判断某个对象是不是DOM对象,然后再进行后续的操作,这里我给出一种兼容各大浏览器,同时又算是比较稳妥的一种方法. 要判断一个对象是否DOM对象,首先想到的无非就是它是否具有D ...
- 如何判断一个js对象是否是Array
经常遇到一个问题,判断某个对象是否为数组类型,在Js中检测对象类型的常见方式有以下: typeof操作符 对于Function.String.Number.Undefined等几种类型的对象来说,几乎 ...
- 判断一个js对象是否是Array
今天在做题时遇到这个问题,找答案的时候,发现评论里大神好多 . 在开发中,我们经常需要判断某个对象是否为数组类型,总结判断某个对象是否是数组的方法. 1.typeof 操作符 对于Function, ...
- 如何判断一个js对象是不是Array
1. instance of 2.constructor 3. isArray 1.var a=new Array(); a instanceof Array; //true 2.var a=new ...
- 判断一个js对象是不是数组
//今天突然想到一个问题,如何判断一个对象是不是数组 var arr = [0, 1, 2]; console.log(arr) //object, 显然不行 //查阅了很多资料,发现几个挺不错的方法 ...
- 判断JS对象是否拥有某属性的方法举例
判断JS对象是否拥有某属性 JS是否拥有某属性的判断方法,这里提供两种方式,供大家参考. 1.in 运算符 var obj = {name:'jack'}; alert('name' in obj); ...
- 如何判断一个C++对象是否在堆栈上(通过VirtualQuery这个API来获取堆栈的起始地址,然后就可以得到答案了),附许多精彩评论
昨天有人在QQ群里问到如何判断一个C++对象是否在堆栈上, 我在网上搜索了下, 搜到这个么一个CSDN的帖子http://topic.csdn.net/t/20060124/10/4532966. ...
- DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢,而是说操作了这个对象后,会触发一些浏览器行为(转)
一直都听说DOM很慢,要尽量少的去操作DOM,于是就想进一步去探究下为什么大家都会这样说,在网上学习了一些资料,这边整理出来. 首先,DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢 ...
- Java判断一个类里是否存在某个属性
Java判断一个类里是否存在某个属性 测试pojo类,比方我有个User类 @Getter @Setter public class User { private Long id; private S ...
随机推荐
- 关于 rem 作为单位设置大小
rem是相对长度单位.相对于根元素(即html元素)font-size计算值的倍数htm{font-size: 62.5%;}根元素(html)先设置一个font-size,一般情况下为了容易计算re ...
- IDEA中Maven管理下添加mysql依赖
在做Java Web项目的时候,不可避免的就要使用到数据库,下面就是在IDEA中添加mysql依赖的方法. 如果你看到这里,就表示你弄懂了IDEA,maven和Tomcat等,所以... 只需要在po ...
- GetComponents和FindObjectsOfTypeAll区别
本文由博主(YinaPan)原创,转载请注明出处:http://www.cnblogs.com/YinaPan/p/Unity_GetComponent.html GetComponents获得的是当 ...
- 二叉树中序遍历 (C语言实现)
在计算机科学中,树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构.二叉树是每个节点最多有两个子树的有序树.通常子树被称作“左子树”(left subtre ...
- BroadcastReceiver监听电量变化
用BroadcastReceiver监听电量的变化,可以实现BroadcastReceiver接收电量变化的广播,然后获取电量百分比信息. BatteryChangedReceiver.java pu ...
- Ubuntu12.04安装java以及Eclipse和Tomcat
阔别已久的Java,现在捡起来偶感觉亚历山大啊,就单单一个环境的安装就搞得我焦头烂额啊.真后悔当初学习Java的时候没有记录下来这一门槛——环境的搭建,要知道学好一门语言,Develop Enviro ...
- C#:装箱和拆箱相关知识整理
1.装箱和拆箱是一个抽象的概念 2. 装箱是将值类型转换为引用类型 ; 拆箱是将引用类型转换为值类型 利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型 ...
- 修改一行SQL代码 性能提升了N倍
在PostgreSQL中修改了一行不明显的代码,把(ANY(ARRAY[...]) 改成 ANY(VALUES(...))),结果查询时间从20s变为0.2s.最初我们学习使用EXPLAN ANALY ...
- 错误:Duplicate interface definition for class
错误: Duplicate interface definition for class "类名称" 原因:在工程中有相同的文件或相同的 @interface 类名称 解决办法: ...
- Vim中安装delimitMate,auto-pairs插件不能输入中文问题
在安装了delimitMate插件之后发现不能正常使用中文输入了,输入法系统是ibus. 解决办法是在ibus的设置中的“在应用程序中使用内嵌编辑模式”这一项去除就可以正常输入中文了,看来可能是ibu ...