标签: ecmascript-5

Object.keys()是否可以在Internet Explorer 9中用于内置对象?

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)

javascript internet-explorer-9 ecmascript-5

3
推荐指数
1
解决办法
4942
查看次数

JScript,JavaScript和ECMA Script之间的功能区别是什么?

长问题

首先,我知道ECMA Script是标准的,而JavaScript和JScript是实现。我了解到这三个指标都有自己的规格,并且有很多引擎,解释器和实现,但是我的具体问题是:

假设为这三个实施了一个完美的解释器和引擎,那么您在一个中可以做什么而您却不能在另一个中做,或者哪​​个会与其他两个有不同的作用?

我知道这是一个广泛的问题,但是由于两种语言(JScript和JavaScript)均源于规范(ECMAScript),因此实际差异应该可以忽略不计。

同样,我不是在谈论跨浏览器的兼容性(IE8和IE9使用了不同的引擎,这些引擎对JScript的解释不同,并且标准随时间而改变),而是纯ECMA5,JavaScript(如果有正式标准,我想最接近的是W3CMDN以及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 ecmascript-5 jscript

3
推荐指数
1
解决办法
464
查看次数

Javascript setter返回值而不进行验证

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

3
推荐指数
1
解决办法
518
查看次数

对象构造:测试这是否是instanceOf Object

我在供应商代码的对象构造函数中看到了这个测试:

function MyObject() {
  if (!(this instanceof MyObject)) return new MyObject;
  ...
}
Run Code Online (Sandbox Code Playgroud)

我的第一个倾向是这个测试用于this在调用构造函数时阻止绑定到另一个值.但是,我想在这里检查一下,还有一些我不想要的东西.有人可以解释一下这个测试的确切意图吗?

javascript node.js ecmascript-5

3
推荐指数
1
解决办法
61
查看次数

我可以在EcmaScript 5中使用新的get和set在一个声明中创建一个javascript函数吗?

我对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)

javascript ecmascript-5 angularjs

3
推荐指数
1
解决办法
243
查看次数

Javascript过滤数组中的值

我有一个数组数组,每个数组包含两个元素.如何通过过滤第一个元素从数组中返回第二个元素?

例如,我有以下数组,我的函数应该返回第一个项目所在的每个子数组的第二个元素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 arrays ecmascript-5

3
推荐指数
1
解决办法
2644
查看次数

有人可以解释使用语句值Javascript ECMAScript吗?

我是Javascript的新手,并注意到语句有值:

> x = 1
<- 1

> if (false) {
    x=1;
  } 
  else { x=2 };
<- 2
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么语句具有它们在实际应用程序中使用的值,因为函数需要通过显式返回值return.

这与完成的概念有关,它与价值相关,不论其类型(正常还是突然)?

javascript ecma ecmascript-5 ecmascript-6

3
推荐指数
1
解决办法
61
查看次数

React:推荐使用哪种箭头或正常功能?

在我觉得做手动功能/对象绑定后,我开始使用箭头功能,并且范围相关的问题令人头疼,但我非常认真地了解使用正常功能(ES5)比使用箭头功能(ES6)更好.

我对这些功能的理解

React中的正常函数:

  1. 手动绑定对象/函数以便在函数内部使用状态或道具并避免与范围相关的问题
  2. 始终在构造函数中绑定对象/函数,但不直接在渲染中绑定
  3. 如果你在构造函数中执行它,那么当你的组件第一次渲染时,Webpack只在bundle.js文件中创建一个新对象/函数
  4. 如果你直接在渲染中执行它,那么每次组件渲染和重新渲染时,Webpack都会在bundle.js文件中创建一个新对象/函数
  5. 如果你没有绑定,那么你就无法访问状态或道具.您必须将当前对象分配给本地变量,否则this.state或this.props是未定义的

React中的箭头功能:

  1. 无需在构造函数中绑定对象/函数也不需要渲染
  2. 你不需要依赖当前对象的局部变量interms,即,让那=这个;
  3. 您不会有范围问题,并且会自动进行对象/功能绑定

但我的查询是,我听说它建议使用正常的功能,并将其绑定在构造函数,而不是使用箭头功能,因为箭头功能创建新的对象/功能的WebPack bundle.js每次你的组件呈现和重新呈现时间.

这是真的?推荐哪个?

这个线程接受了答案在React中正确使用箭头函数说 - >这取决于你在哪里使用箭头功能.如果在render方法中使用了Arrow函数,那么每次调用render时它们都会创建一个新实例,就像bind的工作方式一样.

对不起,如果你觉得这是一个戏剧性的问题,但这是我最大的疑问.请建议

ecmascript-5 ecmascript-6 reactjs

3
推荐指数
1
解决办法
1683
查看次数

使用spread运算符将参数分配给ES5构造函数中的新对象?

构造函数正在接受具有多个属性的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 ecmascript-5

3
推荐指数
1
解决办法
92
查看次数

是否可以将undefined用作Object属性名称?

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

[/编辑]

javascript ecmascript-5 ecmascript-6

3
推荐指数
1
解决办法
67
查看次数