控制台中显示的变量值与相等测试不一致

时间:2011-12-01 05:44:02

标签: comparison coffeescript equality

给出以下内容: 其中data是作为AJAX值接收的字符串,数据的值为'good':

console.log data          # good
console.log typeof data   # string
console.log typeof 'data' # string

if data is 'good'
  console.log 'test' # NOTHING!!!

我不明白......

让我想要好的'JavaScript回来......

建议后的更完整的例子:

以下不起作用......

  $('#profile_slug').keyup(()->
    if $(this).val() != original_slug
      value = encodeURIComponent $(this).val()
      console.log value
      $.get('/live_validate/slug?slug='+value, (data)->

        console.log data
        console.log typeof data
        console.log typeof 'data'

        `
        if (data == 'good') {
          console.log('test');
        }

       `

更新2

奇怪的是:

console.dir data
console.dir 'good'

good
No Properties

good
No Properties

更新3

控制器

  if @slug.nil?
    @message = "good"
  else
    @message = "bad"
  end

视图

!= @message

的CoffeeScript

new_data = data.replace /^\s+|\s+$/g, ""

结果

相同的sh * t。

更新4 +回答

这段代码最终成为了我所需要的东西,起初它对我所做的其他事情都不起作用,但它是拼图中的最后一块,让我确保之前没有看不见的空格或者在收到的字符串之后。

    $.get('/live_validate/slug?slug='+value, (data)->
        # console.log data

        stripped_data = data.replace /^\s+|\s+$/g, ""

        # console.log encodeURIComponent data
        # console.log (data.charCodeAt(i) for i in [0...data.length])       


        if stripped_data is 'good'
          $('#profile_slug').addClass('valid-field')
          $('#profile_slug').removeClass('invalid-field')
        else if stripped_data is 'bad'
          $('#profile_slug').addClass('invalid-field')
          $('#profile_slug').removeClass('valid-field')

2 个答案:

答案 0 :(得分:2)

这很奇怪,但我的猜测是比较中的两个'good'字符串中的一个使用的Unicode字符与您期望的ASCII字符相似但不相等。

试试这个:

console.log (data.charCodeAt(i) for i in [0...data.length])

data = 'good'时,我

[ 103, 111, 111, 100 ]

答案 1 :(得分:0)

它最终成为ajax响应字符串末尾的一个隐形字符...谢谢大家!