为什么有人更喜欢lodash.js或underscore.js实用程序库而不是另一个?
Lodash似乎是下划线的替代品,后者已经存在了更长时间.
我认为两者都很精彩,但我对他们如何努力进行有根据的比较并不了解,我想更多地了解这些差异.
如果我有一个JS对象,如:
var foo = { 'bar' : 'baz' }
Run Code Online (Sandbox Code Playgroud)
如果我知道foo有基本的键/值结构,但不知道键的名称,最简单的方法是什么?for ... in?$.each()?我希望有更好的东西......
与JavaScript中的数组和对象(尤其是Google V8)相关的性能对于文档来说非常有趣.我在互联网上找不到关于这个主题的综合文章.
我知道一些对象使用类作为它的底层数据结构.如果有很多属性,它有时被视为哈希表?
我也理解,数组有时被视为C++数组(即快速随机索引,慢速删除和调整大小).而且,其他时候,它们更像对象(快速索引,快速插入/删除,更多内存).并且,有时它们可能存储为链接列表(即慢速随机索引,在开头/结尾快速删除/插入)
JavaScript中的数组/对象检索和操作的精确性能是什么?(专门针对Google V8)
更具体地说,它对性能的影响如下:
任何文章或链接的更多细节也将不胜感激.:)
编辑:我真的很想知道JavaScript数组和对象是如何工作的.此外,在什么情况下 V8引擎"知道""转换"到另一个数据结构?
例如,假设我用...创建一个数组
var arr = [];
arr[10000000] = 20;
arr.push(21);
Run Code Online (Sandbox Code Playgroud)
这里到底发生了什么?
或者......这个怎么样...... ???
var arr = [];
//Add lots of items
for(var i = 0; i < 1000000; i++)
arr[i] = Math.random();
//Now I use it like a queue...
for(var i = 0; i < arr.length; i++)
{
var item = arr[i].shift();
//Do something with item...
} …Run Code Online (Sandbox Code Playgroud) 从标准 setPrototypeOf函数的MDN文档 以及非标准属性: __proto__
强烈建议不要改变对象的[[Prototype]],无论如何实现,因为它非常慢并且不可避免地减慢了现代JavaScript实现中后续执行的速度.
使用Function.prototype添加属性是在添加成员函数JavaScript类的方式.然后如下所示:
function Foo(){}
function bar(){}
var foo = new Foo();
// This is bad:
//foo.__proto__.bar = bar;
// But this is okay
Foo.prototype.bar = bar;
// Both cause this to be true:
console.log(foo.__proto__.bar == bar); // true
Run Code Online (Sandbox Code Playgroud)
为什么foo.__proto__.bar = bar;不好?如果它的坏不是Foo.prototype.bar = bar;那么糟糕?
那么为什么会出现这样的警告:它非常缓慢并且不可避免地减慢了现代JavaScript实现中后续执行的速度.当然Foo.prototype.bar = bar;不是那么糟糕.
更新也许通过突变他们意味着重新分配.见接受的答案.
我有一个像这样的json:
json = { "key1" : "watevr1", "key2" : "watevr2", "key3" : "watevr3" }
Run Code Online (Sandbox Code Playgroud)
现在,我想知道一个密钥的索引,在json中说"key2" - 这是1.有办法吗?
我有以下TypeScript枚举:
enum Country {
BR = "Brazil",
NO = "Norway"
}
Run Code Online (Sandbox Code Playgroud)
然后想象我有一个方法,它接受一个Country参数,如下所示:
someFunc = (country: Country): void => {
console.log(country) //Will print "Brazil" if country = Country.BR
console.log(Country[country]) //Same as above
console.log(???) //I want to print "BR" if country = Country.BR
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决第三个console.log陈述?
如何获得枚举密钥?
问候
例如,以下对象:
var fruits = {
"red" : "apple",
"blue" : "blueberry",
"yellow" : "banana"
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用delete fruits["red"]键名删除它,但是如何通过水果名称删除对象项?
c = {
"UNKNOWN_ERR" : 0,
"INDEX_SIZE_ERR" : 1,
"DOMSTRING_SIZE_ERR" : 2,
"HIERARCHY_REQUEST_ERR" : 3,
"WRONG_DOCUMENT_ERR" : 4,
"INVALID_CHARACTER_ERR" : 5,
"NO_DATA_ALLOWED_ERR" : 6,
"NO_MODIFICATION_ALLOWED_ERR" : 7,
"NOT_FOUND_ERR" : 8,
"NOT_SUPPORTED_ERR" : 9}
Run Code Online (Sandbox Code Playgroud)
要使用密钥获取值很简单,我只需使用key in c["UNKNOWN_ERR"]get 0,因为所有值都是唯一的,从值(errorcode)获取密钥(消息)是安全的.
有没有一种标准的方法可以做到这一点,还是我需要编写一个查看所有键并搜索该特定值的函数?
我有一个组件,里面有一个子组件列表(用父组件内的yield绘制):
parent-component
for item in items
child-component item=item childProperty=parentProperty
Run Code Online (Sandbox Code Playgroud)
在子组件内部,我有一个关于"childProperty"的观察者,它会在parentProperty更改时正确触发.问题是我想在财产没有实际改变的时候触发观察者.
要做到这一点,在我的父组件中,我有:
this.notifyPropertyChange('parentProperty')
出于某种原因,这不是对子组件的影响.这是一个JS bin显示:
http://emberjs.jsbin.com/caxedatogazo/1/edit
虽然我很乐意更多地讨论我的用例,但我更感兴趣的是JS bin是否应该工作,如果没有,为什么..
非常感谢您的帮助!
我有
let name = 'enzo'
let age = 20
Run Code Online (Sandbox Code Playgroud)
如果我记录姓名console.log(name)和年龄console.log(age),它会显示
恩佐
20
但我期待这种效果
console.log("name:",name)
console.log("age:",age)
Run Code Online (Sandbox Code Playgroud)
它会显示出来
姓名:恩佐
年龄:20岁
那么如何才能得到变量的名称?
javascript ×9
object ×3
performance ×2
arrays ×1
ember.js ×1
enums ×1
hashmap ×1
jquery ×1
json ×1
lodash ×1
prototype ×1
reactjs ×1
typescript ×1
v8 ×1