为什么Python dict构造函数比使用文字语法慢?
在与我的同事进行热烈讨论之后,我做了一些比较并获得了以下统计数据:
python2.7 -m timeit "d = dict(x=1, y=2, z=3)"
1000000 loops, best of 3: 0.47 usec per loop
python2.7 -m timeit "d = {'x': 1, 'y': 2, 'z': 3}"
10000000 loops, best of 3: 0.162 usec per loop
Run Code Online (Sandbox Code Playgroud)
构造函数变慢的原因是什么?在什么情况下,如果有的话,会更快吗?
创建Javascript对象的典型方法如下:
var map = new Object();
map[myKey1] = myObj1;
map[myKey2] = myObj2;
Run Code Online (Sandbox Code Playgroud)
我需要创建一个这样的映射,其中键和值都是字符串.我有一大堆但静态的对要添加到地图中.
有没有办法在Javascript中执行这样的操作:
var map = { { "aaa", "rrr" }, { "bbb", "ppp" } ... };
Run Code Online (Sandbox Code Playgroud)
或者我必须为每个条目执行类似的操作:
map["aaa"]="rrr";
map["bbb"]="ppp";
...
Run Code Online (Sandbox Code Playgroud)
基本上,剩余的Javascript代码将遍历此映射并根据"运行时"已知的标准提取值.如果这个循环作业有更好的数据结构,我也很感兴趣.我的目标是尽量减少代码.
例如,我可以这样做吗?:
{
a: b: c: d: 1,
e: 2,
geh: function() { alert("Hi!") }
}
Run Code Online (Sandbox Code Playgroud)
编辑:有什么方法可以避免这样做吗?:
{
a: 1,
b: 1,
c: 1,
d: 1,
e: 2,
geh: function() { alert("Hi!") }
}
Run Code Online (Sandbox Code Playgroud) Javascript中是否有数据结构或模式可用于快速查找(通过键,如关联数组)和有序循环?
是的,现在我使用对象文字存储我的数据,但我发现Chrome在循环遍历属性名称时没有维护顺序.
有没有一种常见的方法来解决这个问题?
谢谢你的任何提示.
我正在尝试使用this关键字调用我创建的对象文字中的函数.但是错误显示说this.doTheMove()不是功能:
window.onload = function(){
var animBtn = document.getElementById('startAnim');
animBtn.addEventListener('click', Animation.init, false);
}
var Animation = {
init: function(){
this.doTheMove(); // I'm calling the function here, but it gives an error.
},
doTheMove: function(){
alert('Animation!');
}
}
Run Code Online (Sandbox Code Playgroud)
为什么会出错?
有没有办法在Javascript中确定对象是使用object-literal表示法还是使用构造函数方法创建的?
在我看来,你只是访问它的父对象,但如果你传入的对象没有引用它的父对象,我认为你不能告诉它,你呢?
我想弄清楚为什么在对象文本的箭头函数被调用window为this.有人可以给我一些见解吗?
var arrowObject = {
name: 'arrowObject',
printName: () => {
console.log(this);
}
};
// Prints: Window {external: Object, chrome: Object ...}
arrowObject.printName();
Run Code Online (Sandbox Code Playgroud)
一个按预期工作的对象:
var functionObject = {
name: 'functionObject',
printName: function() {
console.log(this);
}
};
// Prints: Object {name: "functionObject"}
functionObject.printName();
Run Code Online (Sandbox Code Playgroud)
根据巴贝尔REPL的说法,他们被描述为
var arrowObject = {
name: 'arrowObject',
printName: function printName() {
console.log(undefined);
}
};
Run Code Online (Sandbox Code Playgroud)
和
var functionObject = {
name: 'functionObject',
printName: function printName() {
console.log(this);
}
};
Run Code Online (Sandbox Code Playgroud)
为什么没有arrowObject.printName();被arrowObject …
javascript object-literal ecmascript-6 babeljs arrow-functions
json2.js严格要求所有对象键都是双引号.但是,在Javascript语法{"foo":"bar"}中相当于{foo:"bar"}.
我有一个textarea接受来自用户的JSON输入,并希望"轻松"双重引用键的限制.我已经看过json2.js如何在它出现之前的四个阶段验证JSON字符串.我能够添加第5个阶段以允许不带引号的密钥,并想知道这个逻辑是否存在任何安全隐患.
var data = '{name:"hello", age:"23"}';
// Make sure the incoming data is actual JSON
// Logic borrowed from http://json.org/json2.js
if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
.replace(/(?:^|:|,)(?:\s*\[)+/g, ":") // EDITED: allow key:[array] by replacing with safe char ":"
/** everything up to this point is json2.js **/
/** this is the 5th stage where it accepts unquoted keys **/
.replace(/\w+\s*\:/g, ":")) ) { // EDITED: allow any alphanumeric key
console.log( (new Function("return " + …Run Code Online (Sandbox Code Playgroud) 在MDC找到了这个,但是我想如何添加一个私有变量
var dataset = {
tables:{
customers:{
cols:[ /*here*/ ],
rows:[ /*here*/ ]
},
orders:{
cols:[ /*here*/ ],
rows:[ /*here*/ ]
}
},
relations:{
0:{
parent:'customers',
child:'orders',
keyparent:'custid',
keychild:'orderid',
onetomany:true
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在Javascript中理解OOP的方式,如果存在这样的项目,我可以访问dataset.tables.customers.cols [0].
但是,如果我想将私有变量放入客户,那会是什么样子?在运行时错误中
添加var index = 0;结果.
说我有
myfunc({
var1: 1,
var2: 2,
})
Run Code Online (Sandbox Code Playgroud)
如果我想拥有一个使用当前未命名对象的值,我该怎么做?
如果我想要的话
myfunc({
var1: 1,
var2: 2,
var3: this.var1 + this.var2
})
Run Code Online (Sandbox Code Playgroud)
显然这不起作用.
正确的语法是什么?
object-literal ×10
javascript ×9
babeljs ×1
dictionary ×1
ecmascript-6 ×1
json ×1
loops ×1
oop ×1
properties ×1
python ×1