如果我创建这样的对象:
var obj = {};
obj.prop1 = "Foo";
obj.prop2 = "Bar";
Run Code Online (Sandbox Code Playgroud)
生成的对象总是这样吗?
{ prop1 : "Foo", prop2 : "Bar" }
Run Code Online (Sandbox Code Playgroud)
也就是说,属性是否与我添加它们的顺序相同?
我在JavaScript中有一个对象:
{
abc: '...',
bca: '...',
zzz: '...',
xxx: '...',
ccc: '...',
// ...
}
Run Code Online (Sandbox Code Playgroud)
我想使用for循环来获取其属性.我想在部分中迭代它(不是一次所有的对象属性).
使用简单的数组我可以使用标准for循环:
for (i = 0; i < 100; i++) { ... } // first part
for (i = 100; i < 300; i++) { ... } // second
for (i = 300; i < arr.length; i++) { ... } // last
Run Code Online (Sandbox Code Playgroud)
但是如何用物体做呢?
我知道地图是一种将键映射到值的数据结构.字典不一样吗?地图和字典1有什么区别?
1.我不是在询问它们是如何在X或Y语言中定义的(这似乎是人们通常在这里提出的问题),我想知道它们在理论上的区别.
当密钥未知时直到运行时,并且当所有键都是相同类型且所有值都是相同类型时,请使用对象上的映射.
当存在对各个元素进行操作的逻辑时使用对象.
在对象上使用地图的适用示例是什么?特别是"什么时候直到运行时才能知道密钥?"
var myMap = new Map();
var keyObj = {},
keyFunc = function () { return 'hey'},
keyString = "a string";
// setting the values
myMap.set(keyString, "value associated with 'a string'");
myMap.set(keyObj, "value associated with keyObj");
myMap.set(keyFunc, "value associated with keyFunc");
console.log(myMap.get(keyFunc));
Run Code Online (Sandbox Code Playgroud) 我想开始使用ES6 Map而不是JS对象,但我被阻止了,因为我无法弄清楚如何使用JSON.stringify()一个Map.我的密钥保证是字符串,我的值将始终是列表.我是否真的必须编写一个包装器方法来序列化?
var a = new Map([[ 'a', 1 ]]);
a.get('a') // 1
var forStorageSomewhere = JSON.stringify(a);
// Store, in my case, in localStorage.
// Later:
var a = JSON.parse(forStorageSomewhere);
a.get('a') // TypeError: undefined is not a function
Run Code Online (Sandbox Code Playgroud)
不幸的是JSON.stringify(a);简单地返回'{}',这意味着当恢复时它变成一个空对象.
我发现es6-mapify允许在Map和普通对象之间进行向上/向下转换,因此这可能是一个解决方案,但我希望我只需依靠外部依赖来持久保存我的地图.
我不太明白 Typescript 中 Map 和 Record 之间的区别是什么。
我发现的唯一比较是
Typescript 2.1 引入的一个非常有用的内置类型是 Record:它允许您创建类型化映射,非常适合创建复合接口。
https://levelup.gitconnected.com/advanced-typescript-types-with-examples-1d144e4eda9e,
但是像这样输入地图:
const testMap = new Map<number, string>();
Run Code Online (Sandbox Code Playgroud)
也有效,所以我不太明白其中的区别。
如果我们可以使用javascript对象创建键/值对,那么假设是什么用于ES6新的Map()对象?
我什么时候应该使用另一个?Map是限制为值还是包含函数?
我想要了解是否使用JS对象或地图,如果我需要在大型数据集(> 1000个对象)中按字符串键进行随机查找.
我写了一个简单的基准http://jsperf.com/javascript-objects-vs-map-performance,结果显示在Chrome(V8)中,对象的表现比你好大约2倍.但是,我检查了其他浏览器,结果则相反.为什么它们在各种浏览器/引擎中有所不同?
我还在Node.JS中编写了类似的测试,我看不到类似的结果(测试用例6比测试用例4要多得多):
var now = require("performance-now");
var mapKeyValue = new Map();
var mapStringKeyValue = new Map();
var objectKeyValue = {};
var n = 10000;
var testSamples = 100;
var firstRow = 0;
var firstRowString = firstRow + "";
var middleRow = Math.floor(n / 2);
var middleRowString = middleRow + "";
var lastRow = n - 1;
var lastRowString = lastRow + "";
var nonExist = n * 2;
var nonExistString = nonExist + "";
function …Run Code Online (Sandbox Code Playgroud) javascript ×8
ecmascript-6 ×5
dictionary ×3
object ×3
json ×2
iteration ×1
key-value ×1
loops ×1
maps ×1
typescript ×1
weakmap ×1