标签: ecmascript-harmony

如何检查/迭代节点中的对象?

我从一个猫鼬查询中得到一个结果(该对象),并希望在我对该对象进行字符串化并将其发送到客户端之前替换/删除一些键.

当我在console.log对象时,一切都很好(列出所有键,仅此而已).当我在对象上执行for..in时,隐藏的字段突然冒出(并且感兴趣的键,不要).它们有意义 - 它们属于猫鼬 - 但我不想要它们.同样的事情发生,当在Object - hidden字段弹出窗口上使用Object.keys或Object.getOwnPropertyNames时,没有用.

所以我想用util.inspect(obj,true,null,true)检查元素,并将结果记录到控制台.控制台上的结果是一样的,好像我在没有检查的情况下直接记录对象.

现在,有两个问题;

  1. 如何正确检查对象,以便实际获取有关对象的内部/隐藏信息?
  2. 如何迭代对象并仅获取字段?(是的,我在for..in循环中进行hasOwnProperty检查)

//编辑

好,我知道了.经过一些调查,我意识到,mongoose对象代理其属性并具有toJSON函数,这解释了为什么console.logs处于预期的输出结构中.解决方案是使用Mongoose自己的toObject方法;

mongooseObj.toObject({ getters: true, virtuals: false })
Run Code Online (Sandbox Code Playgroud)

这样,我可以迭代Object.getOwnPropertyNames并替换/删除我不希望客户端知道的键!

javascript mongoose node.js ecmascript-harmony

5
推荐指数
1
解决办法
1811
查看次数

Ember.js对象观察者是否等同于ES6 Harmony Object.observe?

看看对象内部的新观察ES6特征,我想知道Ember和ES6是等价还是不同?我们可以安全地使用Watchjs polyfill with ember吗?

javascript ecmascript-harmony ember.js object.observe

5
推荐指数
1
解决办法
1233
查看次数

如何将-harmony node标志添加到grunt-express

我正在使用grunt-express进行本地开发.

这是我的GruntFile.js

var path = require('path');

module.exports = function(grunt){
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    uglify:{
      options:{
        banner:'/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
      }
    },
    express:{
      server:{
        options:{
          debug:true,
          server: path.resolve('app.js') 
        }
      }
    },
    env : {
      options:{

      },
      dev : {
          NODE_ENV : 'development'
      },
      prod : {
          NODE_ENV : 'production'
      }
    },
    mochaTest:{
        test:{
             options:{
                reporter:'spec'
             },
             src:['tests/*.js']
        }
    }

  });

  grunt.loadNpmTasks('grunt-contrib-uglify');
  grunt.loadNpmTasks('grunt-express');
  grunt.loadNpmTasks('grunt-env');
  grunt.loadNpmTasks('grunt-mocha-test');
  grunt.loadNpmTasks('grunt-shell');


  // tasks
  grunt.registerTask('start', ['env:dev', 'express', 'express-keepalive']);
  grunt.registerTask('stop', ['express-stop']);
  grunt.registerTask('test', 'mochaTest');


};
Run Code Online (Sandbox Code Playgroud)

我用我的本地服务器启动

咕噜声开始 …

javascript node.js express ecmascript-harmony gruntjs

5
推荐指数
1
解决办法
4377
查看次数

在ES6中,第一次调用迭代器的`next`方法时参数会发生什么?

如果你有像这样的发电机,

function* f () {
  // Before stuff.
  let a = yield 1;
  let b = yield 2;
  return [a,b];
}
Run Code Online (Sandbox Code Playgroud)

然后,跑

var g = f();
// this question is over this value.
g.next(123); // returns: { value: 1, done: false }
g.next(456); // returns: { value: 2, done: false }
g.next(); // returns: { value: [ 456, undefined ], done: true }
Run Code Online (Sandbox Code Playgroud)

第一次调用.next()设置a123和第二次调用设置b456,但是在最后一次调用时.next()返回,

{ value: [ 456, …
Run Code Online (Sandbox Code Playgroud)

javascript v8 generator ecmascript-harmony

5
推荐指数
1
解决办法
362
查看次数

如何识别ES6发电机

说我有这样的生成器函数:

var g = function*() {
  yield 1;
  yield 2;
  yield 3;
};

var gen = g();
Run Code Online (Sandbox Code Playgroud)

如何以编程方式告诉它g是生成器函数,还是gen迭代器?

这似乎是一种可能性:

g.constructor.name === 'GeneratorFunction'
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

更新:我最终采取了类似于Eric的答案的方法,但eval首先使用首先确定目标平台是否支持生成器.这是实施:

var GeneratorConstructor = (function() {
  try {
    var generator;
    return eval('generator = function*() { yield 1; };').constructor;

  } catch (e) {
    // If the above throws a SyntaxError, that means generators aren't
    // supported on the current platform, which means isGenerator should
    // always return …
Run Code Online (Sandbox Code Playgroud)

javascript generator ecmascript-harmony

5
推荐指数
2
解决办法
1212
查看次数

我们可以用ES6 Generator做什么,我们不能用于循环?

我通过ES6功能和发电机引起了我的注意.出现在脑海中的一件事是链接Promise对象,我不能用循环来做.我们能做什么其他机制,我们以前不能做到?

我明白这是一个广泛的问题,但我现在还想不出什么,只有承诺.

javascript generator ecmascript-harmony ecmascript-6

5
推荐指数
1
解决办法
863
查看次数

如何测试和/ ES6/ECMAScript 6 JavaScript?

根据标题,我正在尝试测试一些用nodejs运行的ES6 JS编写的AMD模块.

我首先尝试使用Intern:即使--harmony在nodejs中启用后,我最终还是面对了Intern的依赖链,我无法在例如伊斯坦布尔,esprima和其他人中启用Harmony (我为此开了一个问题).

然后我转移到摩卡上,在这里我被卡住...... 奇怪的是.我为nodejs和mocha本身启用了Harmony,这是package.json测试脚本:

"test": "node --harmony node_modules\\mocha\\bin\\mocha tests --harmony --recursive"
Run Code Online (Sandbox Code Playgroud)

我从命令提示符运行为npm test my_test_folder.仍然,一些ES6构造(如const)传递确定,但随后它在解构赋值时窒息.这是第一个输出行:

const { log, dir } = require('../consoleLogger.js');
      ^
SyntaxError: Unexpected token {
    at Module._compile (module.js:439:25)
    at Object.Module._extensions..js (module.js:474:10)
    [...continues...]
Run Code Online (Sandbox Code Playgroud)

我也检查了这个SO线程并听说过转发器,但我真的不知道它们是否可以工作,我现在正试图让转换器在这种情况下工作.

关于如何解决这个问题的任何想法,而无需改变代码中传播的所有ES6位?TA.

javascript mocha.js ecmascript-harmony ecmascript-6 intern

5
推荐指数
1
解决办法
2583
查看次数

如果函数是调用了.bind(),是否无法判断函数是否为生成函数?

看起来在任何生成器函数上调用.bind(this)会破坏我查看函数是否为生成器的能力.有想法该怎么解决这个吗?

var isGenerator = function(fn) {
    if(!fn) {
        return false;
    }

    var isGenerator = false;

    // Faster method first
    // Calling .bind(this) causes fn.constructor.name to be 'Function'
    if(fn.constructor.name === 'GeneratorFunction') {
        isGenerator = true;
    }
    // Slower method second
    // Calling .bind(this) causes this test to fail
    else if(/^function\s*\*/.test(fn.toString())) {
        isGenerator = true;
    }

    return isGenerator;
}

var myGenerator = function*() {
}

var myBoundGenerator = myGenerator.bind(this);

isGenerator(myBoundGenerator); // false, should be true
Run Code Online (Sandbox Code Playgroud)

javascript generator node.js ecmascript-harmony

5
推荐指数
1
解决办法
1571
查看次数

ECMAScript 6中的原型链

我最近遇到了Axel Rauschmayer博士的这篇精彩文章:

http://www.2ality.com/2015/02/es6-classes-final.html

下面的代码片段大致描述了ECMAScript 6原型链如何从ECMAScript 5的角度来看(原帖的第4.2节):

// ECMAScript 6
class Point {
    constructor(x, y) {
        this.x = x;
        this.y = y;
    }
    ···
}

class ColorPoint extends Point {
    constructor(x, y, color) {
        super(x, y);
        this.color = color;
    }
    ···
}

let cp = new ColorPoint(25, 8, 'green');
Run Code Online (Sandbox Code Playgroud)

ECMAScript 5中的"引擎盖下"视图:

 // ECMAScript 5
 // Instance is allocated here
function Point(x, y) {
    // Performed before entering this constructor:
    this = Object.create(new.target.prototype);

    this.x …
Run Code Online (Sandbox Code Playgroud)

javascript subclass ecmascript-harmony ecmascript-6

5
推荐指数
1
解决办法
816
查看次数

浅拷贝对象遗漏ES6/ES7中的一个或多个属性?

这就是我一直在做的事情:

var props = { id: 1, name: 'test', children: [] }

//copy props but leave children out
var newProps = { ...props }
delete newProps.children

console.log(newProps) // { id: 1, name: 'test' }
Run Code Online (Sandbox Code Playgroud)

有更清洁,更简单的方法吗?

javascript ecmascript-harmony ecmascript-6 babeljs ecmascript-7

5
推荐指数
1
解决办法
2199
查看次数