如果没有转义,single/double 引号会有所不同吗?
Do single/double quotes make a difference if nothing is escaped?
在我看来,'mars%22%3A%22'
和 "mars%22%3A%22"
是等价的,因为没有任何内容被转义。
我创建一个 javscript 小书签已经有一段时间了。有一次,当按原样粘贴到 Chrome.
中的书签时它停止工作
经过多次猜测和检查,我发现了一个解决方案:
一对双引号需要是单引号。为什么?
以下在 split() 中使用单引号的行在小书签中没有问题:
loadDoc("/page1/" + aArray[i].href.split('mars%22%3A%22')[1].slice(0,7),i);
下面所有双引号的行将导致小书签根本不运行:
loadDoc("/page1/" + aArray[i].href.split("mars%22%3A%22")[1].slice(0,7),i);
控制台中没有显示任何错误。
请注意,如果直接粘贴到 javascript 控制台,双引号版本 运行 就可以了!
我哪里不明白?
JavaScript 不像 Ruby 这样的语言那样区分单引号和双引号(其中字符串插值和反斜杠转义序列仅在双引号字符串中有效)。 JavaScript.
中两种类型的引号具有相同的含义
一个区别是,无论您使用哪种类型的引号,都不能在字符串中使用相同的引号,除非您使用反斜杠对其进行转义或对其进行 URL 编码。
对于您的小书签,浏览器会在执行之前取消转义整个 javascript:...
URL 字符串。您可以使用像 javascript:alert('foo%22bar')
这样的简单案例来测试它,它会提醒文本 foo"bar
.
所以你的字符串 mars%22%3A%22
在代码运行之前被转换为 mars":"
。由于此字符串中有双引号,因此只能在单引号字符串中使用。
顺便说一句,我的预感是否正确,您可能试图在此处解析或操作 JSON 文本?如果是,最好使用 JSON.parse()
而不是原始字符串操作。
mars%22%3A%22 是编码字符串。所以当它在编译之前解码时,它就像火星“:”。所以下面的行
loadDoc("/page1/" + aArray[i].href.split("mars%22%3A%22")[1].slice(0,7),i);
根据 "mars":"", 和下面的行
拆分 href
loadDoc("/page1/" + aArray[i].href.split('mars%22%3A%22')[1].slice(0,7),i);
根据 'mars":"' 拆分 href,这有所不同。
在Javascript中,'...'
和"..."
完全相同,前提是内容不包含单引号或双引号。
如果存在差异,那么这是操纵您的 Javascript 代码的代码中的错误,因为显然它只正确处理了双引号的转义。不是代码本身的问题...
在我看来,'mars%22%3A%22'
和 "mars%22%3A%22"
是等价的,因为没有任何内容被转义。
我创建一个 javscript 小书签已经有一段时间了。有一次,当按原样粘贴到 Chrome.
中的书签时它停止工作经过多次猜测和检查,我发现了一个解决方案:
一对双引号需要是单引号。为什么?
以下在 split() 中使用单引号的行在小书签中没有问题:
loadDoc("/page1/" + aArray[i].href.split('mars%22%3A%22')[1].slice(0,7),i);
下面所有双引号的行将导致小书签根本不运行:
loadDoc("/page1/" + aArray[i].href.split("mars%22%3A%22")[1].slice(0,7),i);
控制台中没有显示任何错误。
请注意,如果直接粘贴到 javascript 控制台,双引号版本 运行 就可以了!
我哪里不明白?
JavaScript 不像 Ruby 这样的语言那样区分单引号和双引号(其中字符串插值和反斜杠转义序列仅在双引号字符串中有效)。 JavaScript.
中两种类型的引号具有相同的含义一个区别是,无论您使用哪种类型的引号,都不能在字符串中使用相同的引号,除非您使用反斜杠对其进行转义或对其进行 URL 编码。
对于您的小书签,浏览器会在执行之前取消转义整个 javascript:...
URL 字符串。您可以使用像 javascript:alert('foo%22bar')
这样的简单案例来测试它,它会提醒文本 foo"bar
.
所以你的字符串 mars%22%3A%22
在代码运行之前被转换为 mars":"
。由于此字符串中有双引号,因此只能在单引号字符串中使用。
顺便说一句,我的预感是否正确,您可能试图在此处解析或操作 JSON 文本?如果是,最好使用 JSON.parse()
而不是原始字符串操作。
mars%22%3A%22 是编码字符串。所以当它在编译之前解码时,它就像火星“:”。所以下面的行
loadDoc("/page1/" + aArray[i].href.split("mars%22%3A%22")[1].slice(0,7),i);
根据 "mars":"", 和下面的行
拆分 hrefloadDoc("/page1/" + aArray[i].href.split('mars%22%3A%22')[1].slice(0,7),i);
根据 'mars":"' 拆分 href,这有所不同。
在Javascript中,'...'
和"..."
完全相同,前提是内容不包含单引号或双引号。
如果存在差异,那么这是操纵您的 Javascript 代码的代码中的错误,因为显然它只正确处理了双引号的转义。不是代码本身的问题...