我需要做一些实验,我需要知道javascript中对象的某种唯一标识符,所以我可以看看它们是否相同.我不想使用相等运算符,我需要类似python中的id()函数.
这样的事情存在吗?
这看起来很奇怪.
这是我在IE8控制台中的实验:
typeof obj1 // "object"
obj1.hasOwnProperty // {...}
typeof obj2 // "object"
obj2.hasOwnProperty // undefined
Run Code Online (Sandbox Code Playgroud)
关于什么可能导致这个问题的任何想法?
javascript internet-explorer-8 ie-developer-tools hasownproperty
我想知道为什么规范定义Object.keys而不是Object.prototype.keys?如果API一致,肯定会好得多,我想理解为什么不是这样.
还有其他方法Object.prototype,为什么不是这样呢?
我想在Array.prototype和Object.prototype上定义辅助方法.我目前的计划是做类似的事情:
Array.prototype.find = function(testFun) {
// code to find element in array
};
Run Code Online (Sandbox Code Playgroud)
所以我可以这样做:
var arr = [1, 2, 3];
var found = arr.find(function(el) { return el > 2; });
Run Code Online (Sandbox Code Playgroud)
它工作正常,但如果我在循环中循环数组,for in方法显示为值:
for (var prop in arr) { console.log(prop); }
// prints out:
// 1
// 2
// 3
// find
Run Code Online (Sandbox Code Playgroud)
这将搞砸任何依赖于for in显示值的人(尤其是对象).更高版本的javascript具有内置于数组中的.map和.filter函数,但这些函数不会出现在for in循环中.如何创建更多不会出现在for in循环中的方法?
我正在浏览数组上的MDN文档,当我们想要测试一个对象是否是我们使用的数组时isArray().但是,它的使用与大多数其他方法非常不同.使用常规语法时会弹出一个错误:
console.log([1,2,3].isArray()); // TypeError: [1, 2, 3].isArray is not a function
Run Code Online (Sandbox Code Playgroud)
虽然这确实有效:
console.log(Array.isArray([1,2,3]))
Run Code Online (Sandbox Code Playgroud)
我不明白为什么isArray()(以及其他一些方法)依赖于某些全局对象而不是仅通过所讨论的对象可访问.为什么有些方法需要全局数组对象?
ES5添加数量的方法来Object,这似乎打破的JavaScript的语义的一致性.
举例来说,在此之前的扩展,JavaScript API的身边总是围绕operarting 对对象本身;
var arrayLength = [].length;
var firstPosInString = "foo".indexOf("o");
Run Code Online (Sandbox Code Playgroud)
...新的Object方法就像;
var obj = { };
Object.defineProperty(obj, {
value: 'a',
writable: false
});
Run Code Online (Sandbox Code Playgroud)
......当以下内容更加符合时:
var obj = { };
obj.defineProperty({
value: 'a',
writable: false
});
Run Code Online (Sandbox Code Playgroud)
任何人都可以冷静我的好奇心,为什么会这样?是否有任何代码片段会破坏?标准委员会是否就他们选择这种方法的原因进行了公开讨论?
有人能给我一个关于何时使用 Object.defineProperty()、Object.prototype.property 和 Object.property 的好用例吗?
虽然仍在努力阅读"你不懂JS",但我开始有了好主意(喜欢这个系列).我想我已经掌握了原型,但我遇到了下面的代码.
var myObject = {
a:2
};
Object.getOwnPropertyDescriptor(myObject, "a");
Run Code Online (Sandbox Code Playgroud)
虽然我完全理解输出及其含义,但我试图使用我对原型的理解(或缺乏),并希望在下面做.
myObject.getOwnPropertyDescriptor
Run Code Online (Sandbox Code Playgroud)
我认为它会向上遍历原型链最多的对象原型和获取方法,但事实证明,对象的原型没有这个(假设这不是对象的原型的一部分,我找了DOC,至少我不要把它看作原型的一部分,它说它是一种方法).因此,我假设这只是Object.getOwnPropertyDescriptor,而不是Object.prototype.getOwnPropertyDescriptor.
我是否正确理解了这一点,为什么Object的方法不适用于所有原型?
可能重复:
为什么是Object.defineProperty()而不是this.defineProperty()(对象)?
我注意到特定对象的所有方法都可以从实际的对象实例中调用,即,object.method();或者通过将对象Object.method()作为参数传递.例如:
var a = ['one', 2, 3, 'four'];
a.reverse();
// OR
Array.reverse(a);
Run Code Online (Sandbox Code Playgroud)
我似乎得到了同样的行为.我想知道差异是什么,什么时候会用到另一个?
javascript ×9
prototype ×3
object ×2
arrays ×1
consistency ×1
ecmascript-5 ×1
function ×1
key ×1
properties ×1