V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sweetcode
V2EX  ›  问与答

请教一个关于 alert 的问题

  •  2
     
  •   sweetcode · 2016-09-10 17:12:23 +08:00 · 1539 次点击
    这是一个创建于 3028 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    19 条回复    2016-09-10 22:07:39 +08:00
    virusdefender
        1
    virusdefender  
       2016-09-10 17:46:59 +08:00 via iPhone
    右键查看源代码就明白了
    YuJianrong
        2
    YuJianrong  
       2016-09-10 17:51:17 +08:00
    问题质量好差,扣 10 分。

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

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


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

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

    我这里不是正好和你说的 [但如果这个加号出现在一对引号里,它就是普通的加号字符。] 一致了么..
    bdbai
        14
    bdbai  
       2016-09-10 21:33:46 +08:00 via Android
    @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
        15
    Jakesoft  
       2016-09-10 22:04:41 +08:00
    @bdbai 我的黑色幽默似乎没有生效。。。
    @sweetcode ```符号表示代码块,并不表示引用,>才表示引用。

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

    "<script> alert('"

    targetAnswer[seed]

    "')</script>"

    再结合大大的解释,明白了,谢谢大大
    caomu
        17
    caomu  
       2016-09-10 22:07:05 +08:00 via Android
    Response.Write(
    "<script> alert('"
    +
    targetAnswer[seed]
    +
    "')</script>"
    );
    sweetcode
        18
    sweetcode  
    OP
       2016-09-10 22:07:18 +08:00
    @Jakesoft 刚刚明白了, 5555 ,被套路了一波....还好被 @bdbai 大大给挡住了
    sweetcode
        19
    sweetcode  
    OP
       2016-09-10 22:07:39 +08:00
    @caomu 嗯,刚刚明白了~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5802 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 02:45 · PVG 10:45 · LAX 18:45 · JFK 21:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.