Object.keys()方法对我来说适用于以下代码:
var foo = {foo: 1, bar: 2};
console.log(Object.keys(foo).length);
Run Code Online (Sandbox Code Playgroud)
但是,Object.keys()为内置对象返回一个零长度数组,其代码如下:
<!doctype html>
<html>
<head>
<title>Object.keys()</title>
</head>
<body>
<script type="text/javascript">
console.log(Object.keys(window.document).length);
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我想念什么吗?我正在使用Internet Explorer 9.0.8112.16421。
后记:我仍然不清楚为什么(例如):
for (prop in performance.timing) {
if (performance.timing.hasOwnProperty(prop)) {
console.log(prop);
}
}
Run Code Online (Sandbox Code Playgroud)
...在IE9中什么也没产生,但是效果很好:
for (prop in performance.timing) {
console.log(prop);
}
Run Code Online (Sandbox Code Playgroud) 长问题
首先,我知道ECMA Script是标准的,而JavaScript和JScript是实现。我了解到这三个指标都有自己的规格,并且有很多引擎,解释器和实现,但是我的具体问题是:
假设为这三个实施了一个完美的解释器和引擎,那么您在一个中可以做什么而您却不能在另一个中做,或者哪个会与其他两个有不同的作用?
我知道这是一个广泛的问题,但是由于两种语言(JScript和JavaScript)均源于规范(ECMAScript),因此实际差异应该可以忽略不计。
同样,我不是在谈论跨浏览器的兼容性(IE8和IE9使用了不同的引擎,这些引擎对JScript的解释不同,并且标准随时间而改变),而是纯ECMA5,JavaScript(如果有正式标准,我想最接近的是W3C或MDN以及JScript(显然在MSDN上维护)(参见图)。
笔记:
这不是该问题的重复版本,该问题已经过时五年了,它处理术语的定义,而不是语言的应用,或者该问题再次说明JavaScript和JScript是ECMAScript的方言,但不是进行任何功能上的区别。
这个问题是最接近的,但是我特别希望开发人员期望X和获得Y时应注意的技术陷阱。一个很好的例子就是这个问题,下面的代码:
// just normal, casual null hanging out in the sun
var nullA = null;
// query for non existing element, should get null, same behaviour also for getElementById
var nullB = document.querySelector('asdfasfdf');
// they are equal
console.log(nullA === nullB);
// false
nullA instanceof Object;
// will throw 'Object expected' error in ie8. Black magic
nullB instanceof …Run Code Online (Sandbox Code Playgroud) JavaScript setter更新引用的内部值,但返回值不正确.
var Game =
{
get points() {
return this._points;
},
set points(x){
x = Math.min(x,25);
this._points = x;
return this._points;
}
};
Game.points = 10 ;
console.log(Game.points); // outputs 10
var updatedPoints = (Game.points = 60);
console.log(updatedPoints); // outputs 60
console.log(Game.points); // outputs 25
Run Code Online (Sandbox Code Playgroud)
'updatedPoints'的预期价值是25!
知道为什么会发生这种情况吗?你能否建议是否有办法解决这个问题?
解决此问题的原因:确保JS代码按预期执行,可维护性!
javascript javascript-engine getter-setter javascript-objects ecmascript-5
我在供应商代码的对象构造函数中看到了这个测试:
function MyObject() {
if (!(this instanceof MyObject)) return new MyObject;
...
}
Run Code Online (Sandbox Code Playgroud)
我的第一个倾向是这个测试用于this在调用构造函数时阻止绑定到另一个值.但是,我想在这里检查一下,还有一些我不想要的东西.有人可以解释一下这个测试的确切意图吗?
我对ES5 getter和setter非常感兴趣,可以用作Angular.js控制器.目前我在做:
var helloEC5 = function(){
//constructor
this.pants = "jeans";
};
helloEC5.prototype = {
firstName: 'Seeya',
lastName: 'Latir',
get fullName() {
console.log("get")
return this.firstName + ' ' + this.lastName;
},
set fullName (name) {
console.log('set')
var words = name.toString().split(' ');
this.firstName = words[0] || '';
this.lastName = words[1] || '';
}
};
Run Code Online (Sandbox Code Playgroud)
但有没有办法在函数()中简洁地一起做到这一点?我真正想要的是(伪代码);
var helloEC5 = function() {
firstName: 'Seeya',
lastName: 'Latir',
get fullName() {
console.log("get")
return this.firstName + ' ' + this.lastName;
},
set fullName (name) {
console.log('set')
var …Run Code Online (Sandbox Code Playgroud) 我有一个数组数组,每个数组包含两个元素.如何通过过滤第一个元素从数组中返回第二个元素?
例如,我有以下数组,我的函数应该返回第一个项目所在的每个子数组的第二个元素8:
var array = [[8, 'first'], [8, 'second'], [1, 'empty'], [8, 'third'], [9, 'empty']];
Run Code Online (Sandbox Code Playgroud)
预期结果: ['first', 'second', 'third']
这是我到目前为止实现的,但它返回两个元素而不是每个数组中的第二个元素匹配...
var array = [[8, 'first'], [8, 'second'], [1, 'empty'], [8, 'third'], [9, 'empty']];
var result = array.filter(function(item){
if(item[0] == 8) {
return item[1];
}
});
console.log(result);Run Code Online (Sandbox Code Playgroud)
我是Javascript的新手,并注意到语句有值:
> x = 1
<- 1
> if (false) {
x=1;
}
else { x=2 };
<- 2
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么语句具有它们在实际应用程序中使用的值,因为函数需要通过显式返回值return.
这与完成的概念有关,它与价值相关,不论其类型(正常还是突然)?
在我觉得做手动功能/对象绑定后,我开始使用箭头功能,并且范围相关的问题令人头疼,但我非常认真地了解使用正常功能(ES5)比使用箭头功能(ES6)更好.
我对这些功能的理解
React中的正常函数:
- 手动绑定对象/函数以便在函数内部使用状态或道具并避免与范围相关的问题
- 始终在构造函数中绑定对象/函数,但不直接在渲染中绑定
- 如果你在构造函数中执行它,那么当你的组件第一次渲染时,Webpack只在bundle.js文件中创建一个新对象/函数
- 如果你直接在渲染中执行它,那么每次组件渲染和重新渲染时,Webpack都会在bundle.js文件中创建一个新对象/函数
- 如果你没有绑定,那么你就无法访问状态或道具.您必须将当前对象分配给本地变量,否则this.state或this.props是未定义的
React中的箭头功能:
- 无需在构造函数中绑定对象/函数也不需要渲染
- 你不需要依赖当前对象的局部变量interms,即,让那=这个;
- 您不会有范围问题,并且会自动进行对象/功能绑定
但我的查询是,我听说它建议使用正常的功能,并将其绑定在构造函数,而不是使用箭头功能,因为箭头功能创建新的对象/功能的WebPack bundle.js每次你的组件呈现和重新呈现时间.
这是真的?推荐哪个?
这个线程接受了答案在React中正确使用箭头函数说 - >这取决于你在哪里使用箭头功能.如果在render方法中使用了Arrow函数,那么每次调用render时它们都会创建一个新实例,就像bind的工作方式一样.
对不起,如果你觉得这是一个戏剧性的问题,但这是我最大的疑问.请建议
构造函数正在接受具有多个属性的options对象.如何在不指定每个对象的情况下将它们分配给新创建的对象?
这是我失败的尝试
function Client(options) {
const defaultOptions = {
host: '127.0.0.1',
port: 1905,
loggerFn: console.log,
maxTime: 60000,
startFromTransactionId: 1
};
this = { ...defaultOptions, ...userOptions, ...this }
}
Run Code Online (Sandbox Code Playgroud)
ReferenceError:赋值中的左侧无效
我认为这有效,但我希望使用扩展运算符有一个更简单的解决方案
function Client(options) {
const defaultOptions = {
host: '127.0.0.1',
port: 1905,
loggerFn: console.log,
maxTime: 60000,
startFromTransactionId: 1
};
for (prop in defaultOptions) {
if (defaultOptions.hasOwnProperty(prop)) {
this[prop] = options[prop] ? options[prop] : defaultOptions[prop];
}
}
}
Run Code Online (Sandbox Code Playgroud) javascript是否允许这样做?
a = {undefined : 1}
console.log(a[undefined])Run Code Online (Sandbox Code Playgroud)
[编辑]我想我有点被python的习惯弄糊涂了,但是我实际上是这样的:
a = {[undefined] : 1}
console.log(a[undefined])Run Code Online (Sandbox Code Playgroud)
undefined将其转换为字符串(就像您通过此synthax传递的任何值一样),最终定义了"undefined"prop
[/编辑]
如果是这样,是否所有浏览器都以相同的方式处理它,并且在标准中明确指定了它?
[编辑]
注意:
该问题与“未定义”变量略有不同,即使基本原因和答案相同,该变量也可以用作具有“未定义”属性名称的对象的键。我在一个上下文中问undefined“似乎是值undefined还是字符串"undefined"?”,而链接的问题清楚地表示"undefined"为道具名称,并询问与关键字的名称冲突。
...而且我认为它可以帮助其他习惯使用Python或其他语言的程序员使用类似json的object / dict / hash synthax
[/编辑]
ecmascript-5 ×10
javascript ×9
ecmascript-6 ×3
angularjs ×1
arrays ×1
ecma ×1
jscript ×1
node.js ×1
reactjs ×1