使用toString()的Javascript字符串比较会发生意外行为

时间:2016-11-04 05:16:31

标签: javascript ecmascript-6 babeljs immutable.js

我正在尝试编写一个覆盖Immutable.Record的'isEmpty'的代码

无论如何,我对字符串比较有疑问。

import Immutable from 'immutable'

export default function createSchema(schema) {
  const record = Immutable.Record(schema)

  const Schema = class extends record {
    isEmpty() {
      const aString = this.toString()
      const bString = this.constructor().toString()
      console.log('comp1', this.toString() === this.constructor().toString())
      console.log('comp2', aString === bString)
    }
  }

  return Schema
}

在以下代码中,

import createSchema from 'there'

const aRecord = createSchema({ id: '' })
const a = new aRecord({ id: '1' })
a.isEmpty()

我认为'comp1'和'comp2'都应该打印为false。 (a不是空的!)

但只有'comp1'变为真,'comp2'变为假。

怎么了?

========添加=======

感谢@Felix Kling,我尝试了'新'关键字

我发现改变一行非常不合逻辑

const bString = new this.constructor().toString()

使comp1成为假。

但是,

console.log('comp1', this.toString() === new this.constructor().toString())

不会使comp1错误

0 个答案:

没有答案