javascript - js拼字符串,变量拼接和字面量拼接,区别是什么?

查看:72
本文介绍了javascript - js拼字符串,变量拼接和字面量拼接,区别是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

var year="aaa", 
    month="bbb", 
    time=year+" "+month,
    time1="aaa"+" "+"bbb"

console.log(time==time1)

结果是false,不大明白为什么,敬请各位赐教!

看了刚刚各位的回答,自己试了下,出现了两种情况:

再次更新(2017年8月2日17:45:55):发现确是空格的原因,我也不知道为什么代码中打出空格会不一样。

另:segmentfault编辑器会转码,我本地的代码运行结果是false,但是本页面的代码经手动复制粘贴后,运行结果是true,这也就是上图出现不同结果的原因。经@zhenguoli提示,通过代码栏右上角的快捷栏复制,结果是false。

解决方案

你贴的代码的结果为false是正确的.
你贴的代码的time1中的空格符根本不是 ASCII 中的 (Unicode Character 'SPACE' (U+0020)), 而是 Unicode Character 'NO-BREAK SPACE' (U+00A0), 所以是不相等的. (不知道怎么打出来的).

通过复制time1的输出结果,再打印二进制可以看到:

$ echo -n "aaa bbb" |  xxd
00000000: 6161 61c2 a062 6262                      aaa..bbb

其中, 表示 的是0xc2a0, 就是NO-BREAK SPACE的 utf-8 编码.
可以直接复制你的代码, 再查看二进制内容:

00000000: 7661 7220 7965 6172 3d22 6161 6122 2c20  var year="aaa", 
00000010: 0a20 2020 206d 6f6e 7468 3d22 6262 6222  .    month="bbb"
00000020: 2c20 0a20 2020 2074 696d 653d 7965 6172  , .    time=year
00000030: 2b22 2022 2b6d 6f6e 7468 2c0a 2020 2020  +" "+month,.    
00000040: 7469 6d65 313d 2261 6161 222b 22c2 a022  time1="aaa"+".."
00000050: 2b22 6262 6222 0a0a 636f 6e73 6f6c 652e  +"bbb"..console.
00000060: 6c6f 6728 7469 6d65 3d3d 7469 6d65 3129  log(time==time1)

可以看到, 在

"aaa"+".."
+"bbb"

中间..就不是通常的空格了.

这篇关于javascript - js拼字符串,变量拼接和字面量拼接,区别是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆