请教一个关于 alert 的问题

2016-09-10 17:12:23 +08:00
 sweetcode

asp.net 中我让网页弹出一个 alert 框框,显示我之前代码中的字符 一开始我这么写:

Response.Write("<script> alert(<%=targetAnswer[seed]%>)</script>");

页面上什么都不显示,也不弹窗。

后来上网差了些资料,写法如下

Response.Write("<script> alert('"+targetAnswer[seed]+"')</script>");

请问为什么可以这么写呢?

为什么内层套了个"",并且用+连接就可以了呢?

1524 次点击
所在节点    问与答
19 条回复
virusdefender
2016-09-10 17:46:59 +08:00
右键查看源代码就明白了
YuJianrong
2016-09-10 17:51:17 +08:00
问题质量好差,扣 10 分。

这标题什么鬼?完全不知道问的是什么语言什么环境。
jugelizi
2016-09-10 18:12:30 +08:00
js 是 alert('alert 一下')
不是 alert(alert 一下) 这样会报错
sweetcode
2016-09-10 18:25:32 +08:00
@YuJianrong 我的错....

@virusdefender 我看下,多谢指点
@jugelizi 哦哦,好像明白了,结合 1 楼大大的提醒我去看下源代码
sweetcode
2016-09-10 18:44:55 +08:00
@virusdefender
@YuJianrong
琢磨了一下明白了 3 楼大大的回复,可是仍有一事不明,"+targetAnswer[seed]+" ,此处双引号后面的+是代表连接符吗?可是他是根据什么来判断是连接符还是普通的我要输出的“加号”的呢?
virusdefender
2016-09-10 18:53:08 +08:00
@sweetcode 感觉你需要补一下编程基础了
sweetcode
2016-09-10 19:04:28 +08:00
@virusdefender 对 js 不是很了解,以前只学过 java 和 c++,这学期选修了一门 asp.net 才接触到 c#、 js 这些的,希望大大能解惑一下,或者能告诉我一下这是一个什么语法知识吗
sweetcode
2016-09-10 19:49:26 +08:00
@virusdefender 修正下问法吧,我一直不明白在这个 alert 里面他是怎么知道 targetAnswer 是一个数组的,而不是一个字符串呢?(因为这个原因我第一次写的时候用了<%=targetAnswer[seed]%>)
sweetcode
2016-09-10 19:52:04 +08:00
@virusdefender 如果我单独的吧 <script> alert('"+targetAnswer[seed]+"')</script> 这句丢到一个 html 页面里,他弹出来的内容是 "+targetAnswer[seed]+" ,所以想问下大大,他为什么可以知道我前面的逻辑代码中有 targetAnswer[seed] 这个变量呢?
bdbai
2016-09-10 20:59:34 +08:00
@sweetcode 你要输出的东西是后端(即 ASP.NET )负责的,浏览器请求的时候服务器已经把这个数组的内容转化成字符串,拼成一句 js 语句发送给浏览器了。浏览器只认 js 。
C# 里对字符串用加号可以拼合字符串。但如果这个加号出现在一对引号里,它就是普通的加号字符。 IDE 的代码高亮应该会对你有启发。
Jakesoft
2016-09-10 21:07:04 +08:00
我也有事不懂问一下楼主, java 连接字符串用.号吗?
bdbai
2016-09-10 21:17:42 +08:00
@Jakesoft 用 . 号的似乎是 PHP
sweetcode
2016-09-10 21:23:17 +08:00
@Jakesoft java 里面连接字符串用+的


@bdbai 额,
```
C# 里对字符串用加号可以拼合字符串。但如果这个加号出现在一对引号里,它就是普通的加号字符。 IDE 的代码高亮应该会对你有启发。

```
Response.Write("<script> alert('"+targetAnswer[seed]+"')</script>");

我这里不是正好和你说的 [但如果这个加号出现在一对引号里,它就是普通的加号字符。] 一致了么..
bdbai
2016-09-10 21:33:46 +08:00
@sweetcode 看前一段。浏览器所需的 js 代码在 C# 看来全都是普通字符串,你这一行所做的是拼 js 代码。如果 targetAnswer[seed] 字符串的内容是 abc ,那么浏览器看到的其实是
<script>alert('abc')</script>
仔细对比一下。
C# 的字符串是双引号包围的,输出之后 js 中就没有双引号了。 js 可以用单或双引号包围字符串,'abc' 是 js 的字符串写法。因此
<script>alert(abc)</script>
也就是前一种方法所输出的 js ,当然会导致错误,因为 js 把 abc 当作 js 变量,而不是字符串来看。

有点啰嗦,不知道你明白没有。
Jakesoft
2016-09-10 22:04:41 +08:00
@bdbai 我的黑色幽默似乎没有生效。。。
@sweetcode ```符号表示代码块,并不表示引用,>才表示引用。

本来想回答一下楼主这个问题的,哎,语言组织不是很好,删掉了,楼主多看几遍这个代码想必你还是可以看的懂的。
sweetcode
2016-09-10 22:06:04 +08:00
@bdbai 刚才走开了,回来后仔细观察了 IDE 的符号匹配,发现是三组

"<script> alert('"

targetAnswer[seed]

"')</script>"

再结合大大的解释,明白了,谢谢大大
caomu
2016-09-10 22:07:05 +08:00
Response.Write(
"<script> alert('"
+
targetAnswer[seed]
+
"')</script>"
);
sweetcode
2016-09-10 22:07:18 +08:00
@Jakesoft 刚刚明白了, 5555 ,被套路了一波....还好被 @bdbai 大大给挡住了
sweetcode
2016-09-10 22:07:39 +08:00
@caomu 嗯,刚刚明白了~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/305310

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX