hasownproperty

Benefit of using Object.hasOwnProperty vs testing if Property is undefined

大憨熊 提交于 2019-12-03 11:17:41
Since hasOwnProperty has some caveats and quirks (window / extensive use in ie8 issues / etc). I was wondering if there is any reason to even use it , and if simply testing if a property is undefined is better justified & more simplistic. For example: var obj = { a : 'here' }; if (obj.hasOwnProperty('a')) { /* do something */ } if (obj.a !== undefined) { /* do something */ } // or maybe (typeof (obj.a) !== 'undefined') Just wondering if anyone has any good insight on this, I'd prefer to be using the most cross-browser friendly, and up to date methodology. I've also seen this prototype over

JavaScript: Is a member defined?

眉间皱痕 提交于 2019-12-03 09:52:51
It seems to me that there are four different ways I can determine whether a given object (e.g. foo ) has a given property (e.g. bar ) defined: if (foo.hasOwnProperty(bar)) { if ('bar' in foo) { if (typeof foo.bar !== 'undefined') { if (foo.bar === undefined) { To determine if there is a property named " bar " in the object foo , are all three of those statements equivalent? Are there any sublte semantics I don't know that makes any of these three statements different? kennytm No they are totally different. Example: foo = {bar: undefined}; Object.prototype.baz = undefined; Object.prototype.bing

Why use Object.prototype.hasOwnProperty.call(myObj, prop) instead of myObj.hasOwnProperty(prop)?

匿名 (未验证) 提交于 2019-12-03 02:19:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: If I understand correctly, each and every object in Javascript inherits from the Object prototype, which means that each and every object in Javascript has access to the hasOwnProperty function through its prototype chain. While reading require.js' source code, I stumbled upon this function: function hasProp(obj, prop) { return hasOwn.call(obj, prop); } hasOwn is a reference to Object.prototype.hasOwnProperty . Is there any practical difference to writing this function as function hasProp(obj, prop) { return obj.hasOwnProperty(prop); } And

怎样检测对象是否具有某个属性或方法

随声附和 提交于 2019-11-30 21:25:11
前言: 检测对象是否具有某个属性分为两种情况. 1. 如果要检测从原型链上继承的属性, 则使用: in 关键字; 2. 如果不检测继承的属性, 则使用: Object.hasOwnProperty() 方法; 第一步: 使用 in 关键字 var obj = {}; // obj.name没有声明, 且原型链上也没有找到, 因此返回false "name" in obj; // false // obj没有声明 toString 方法, 但在原型链上找到了, 因此返回true "toString" in obj; // true // 为obj新增一个属性和方法 obj.name = "Lilei"; obj.sayHi = function(){console.log("Hi.")}; "name" in obj; // true; "sayHi" in obj; // true; 第二步: 使用 Object.prototype.hasOwnProperty() 方法 var obj = {}; // obj.name没有声明, 故返回false obj.hasOwnProperty("name"); // false // obj没有声明 toString 方法, 尽管在原型链上有, 但不是定义在obj上的, 因此返回false obj.hasOwnProperty(

Javascript Object对象方法详解

谁说我不能喝 提交于 2019-11-30 15:44:49
一、Object类介绍 Object类是所有JavaScript类的 基类(父类) ,提供了一种创建自定义对象的简单方式,不再需要程序员定义构造函数。可以在程序运行时为Javascript对象随意添加属性,因此可以很容易地创建自定义对象。 二、Object类主要属性 1. constructor :对象的构造函数。 2. prototype :获得类的prototype对象,static性质, 对象的引用。 三、Object类主要方法 1.hasOwnProperty(propertyName) 判断对象是否有某个特定的属性。必须用字符串指定该属性,例如,obj.hasOwnProperty("name"),返回布尔值。 此方法无法检查该对象的原型链中是否具有该属性;该属性必须是对象本身的一个成员。 2.isPrototypeOf(object) 判断该对象是否为另一个对象的原型。 obj1.isPrototypeOf(obj2); obj1是一个对象的实例;obj2是另一个将要检查其原型链的对象。原型链可以用来在同一个对象类型的不同实例之间共享功能。如果obj2的原型链中包含 obj1,那么isPrototypeOf 方法返回true。如果obj2不是一个对象或者obj1没有出现在obj2中的原型链中,isPrototypeOf 方法将返回 false。 3

彻底理解JavaScript原型

馋奶兔 提交于 2019-11-29 17:31:13
原型是JavaScript中一个比较难理解的概念,原型相关的属性也比较多,对象有"[[prototype]]"属性,函数对象有"prototype"属性,原型对象有"constructor"属性。 为了弄清原型,以及原型相关的这些属性关系,就有了这篇文章。 相信通过这篇文章一定能够清楚的认识到原型,现在就开始原型之旅吧。 认识原型 开始原型的介绍之前,首先来认识一下什么是原型? 在JavaScript中, 原型也是一个对象,通过原型可以实现对象的属性继承, JavaScript的对象中都包含了一个" [[Prototype]]"内部属性,这个属性所对应的就是该对象的原型。 "[[Prototype]]"作为对象的内部属性,是不能被直接访问的。所以为了方便查看一个对象的原型,Firefox和Chrome中提供了"__proto__"这个 非标准 (不是所有浏览器都支持)的访问器(ECMA引入了标准对象原型访问器"Object.getPrototype(object)")。 实例分析 下面通过一个例子来看看原型相关概念: function Person(name, age){ this.name = name; this.age = age; this.getInfo = function(){ console.log(this.name + " is " + this.age + "

isPrototypeOf、instanceof、hasOwnProperty函数介绍

寵の児 提交于 2019-11-29 17:14:19
isPrototypeOf、instanceof、hasOwnProperty函数介绍: https://www.jianshu.com/p/44ba37660b4a isPrototypeOf 作用:检测一个对象是否是另一个对象的原型。或者说一个对象是否被包含在另一个对象的原型链中 var p = {x:1};//定义一个原型对象 var o = Object.create(p);//使用这个原型创建一个对象 p.isPrototypeOf(o);//=>true:o继承p Object.prototype.isPrototypeOf(p);//=> true p继承自Object.prototype 以上实例来自与《JavaScript权威指南》,简单解释一下就是每一个 JavaScript 对象都和原型关联,每一个对象都从原型继承属性。所有通过对象直接量创建的对象都使用 Object.prototype 作为他们的原型,因此 p 是继承自 Object.prototype ,因此在 p 的原型链中一定存在 Object.prototype 。 上面还提到了 Object.create(); 该方法创建一个新对象,第一个参数是这个对象的原型,所以上面创建的 o 对象它的原型就是 p ; function Animal(){     this.species = "动物";  }

JavaScript |(一)基础

霸气de小男生 提交于 2019-11-28 05:37:15
文章目录 概述 基本数据类型 Number null和undefined 数组 字符串 对象 比较运算符 控制流 条件判断 循环 概述 运行在浏览器的解释性的语言。 在Web世界里,只有JavaScript能跨平台、跨浏览器驱动网页,与用户交互。 被认为是玩具语言,不被大众所接受,但是写出高质量的代码很难。 ECMAScript是一种语言标准,而JavaScript是网景公司对ECMAScript标准的一种实现。    基本数据类型 Number 下面是三种不太常用的数字类型。 1.2345e3 ; // 科学计数法表示1.2345x1000,等同于1234.5 NaN ; // NaN表示Not a Number,当无法计算结果时用NaN表示 Infinity ; // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity    null和undefined 差别不大,前者表示一个空值,后者表示未定义。 undefined 仅仅在判断函数参数是否传递的情况下有用。    数组 下面是一种不常用的创建方式。 const a = new Array ( 1 , 2 , 3 ) ; // [1, 2, 3] const b = new Array ( 3 ) ; // [empty X 3], 每一个是undefined

尚硅谷_CSS基础 笔记

為{幸葍}努か 提交于 2019-11-27 10:33:40
目录 CSS简介 CSS语法 内联和块元素 选择器 元素选择器&id选择器&类选择器 并集选择器&交集选择器&通配选择器 元素间的关系 后代元素选择器&子元素选择器 伪类选择器 伪元素 属性选择器 子元素的伪类选择器&兄弟元素选择器 否定伪类选择器 样式的继承&选择器的优先级&伪类的顺序 CSS Diner 选择器练习 文本格式化 长度单位 RGB值 字体 行高 文本样式 盒子模型 盒子模型的简介 边框 内边距 外边距 内联元素的盒子模型 display、visibility、overflow 文档流 浮动 高度塌陷 定义 解决方法(一) 解决方法(二、三) 高度塌陷问题的总结 定位 定位的含义 相对定位 绝对定位 固定定位 层级 opacity 背景 背景图片的设置 图片闪烁问题 简写属性 表格 表格的简介 表格的样式 长表格 表格的布局 完善 clearfix 表单 表单简介 表单项 框架集 IE6_png的修复 Hack 条件Hack 属性级Hack 选择符级Hack @(目录) CSS简介 CSS语法 内联和块元素 选择器 元素选择器&id选择器&类选择器 并集选择器&交集选择器&通配选择器 元素间的关系 后代元素选择器&子元素选择器 伪类选择器 伪元素 属性选择器 子元素的伪类选择器&兄弟元素选择器 否定伪类选择器 样式的继承&选择器的优先级&伪类的顺序 CSS

Proxy&Reflect

与世无争的帅哥 提交于 2019-11-27 09:21:00
大部分时候我们使用的都是前置代理, 即我们把直接和代理对象进行交互(所有操作都发生在代理对象身上)的方式叫做前置代理. 那什么是后置代理? 借助原型链机制, 我们直接和 obj 进行交互而不是和代理对象进行交互, 只有当 obj 不存在对应方法时才会通过原型链去查找代理对象. var pobj = new Proxy({}, { get(target, key) { if (!target[key]) { //若target[key]不存在;则这里不应该写在target上,应该写在Obj上,这样下次就不用再次进入原型链的代理里面了 target[key] = function () { console.log(key); }; } return target[key]; } }); var obj = Object.create(pobj); obj.sayHello(); obj.sayGoodBye(); 可以看出来的是, 对于原本存在于目标对象(target)上的属性, 使用代理前置开销更大, 因为明明已经具有对应属性了却还要经过一次代理对象, 而使用代理后置开销更小. 对于那些不存在的属性, 使用后置代理开销更大, 因为不仅要经过原型链查找还要经过一次代理对象, 而使用前置代理只需要经过一次代理对象. 当然也可能引擎有特殊的优化技巧使得这种性能差异并不明显,