javascript - js拼字符串,变量拼接和字面量拼接,区别是什么?
本文介绍了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屋!
查看全文