我喜欢这个技巧......但它在JavaScript中是安全的

时间:2010-03-10 01:16:54

标签: javascript cross-browser

我正在考虑的主要问题是在if语句中分配变量是否在不同浏览器中安全可靠。如果它是安全的,我想使用它。

这里它读取查询字符串,如果查询字符串变量SN是Twitter或Facebook,那么它进入if并且你可以使用变量,如果querystring变量不存在或是其他值,那么它进入else

    if(socialNetwork = (window.location.search.indexOf("SN=Twitter") > 0) ? "Twitter" : ((window.location.search.indexOf("SN=Facebook") > 0) ? "Facebook" : null))
    {
        alert(socialNetwork);
    }
    else
    {
        alert("nope");
    }

4 个答案:

答案 0 :(得分:5)

它是语言设计的一部分,应该适用于每个浏览器,但它很难阅读。

答案 1 :(得分:4)

那太丑了。

var uselessSocialNetworkingApp = window.location.search.replace(/.*\bSN=(\w+)\b.*/, "$1");
if (uselessSocialNetworkingApp)
  alert("yay!");
else
  alert("no");

有趣的是,在“if”标题中有一个可怕的构造,但它在“alert”参数列表中是“if”而不是“?:”表达式: - )

此外,为了至少略微同情预期的风格,这是超现代Javascript中“let”语句的一个例子。

答案 2 :(得分:0)

哦,我的!这是有效的,应该始终有效,假设您在其他地方创建socialNetwork变量,不要创建隐含的全局变量。但是,这确实是一种解决问题的奇怪方法。为什么不创建一个返回社交网络的函数来抽象一点?

那就是说,如果你真的想要一个单行解决方案,那怎么样?:

alert(function(){ var m = /SN=([A-Za-z]+)/.exec(window.location.search); return (m ? m[1] : null)}());

答案 3 :(得分:0)

location.socialNetwork== (function(){
 var s= location.search || '';
 s= /SN=([a-zA-Z]+)/.exec(s) || [];
 return s[1] || null;

})()

alert(location.socialNetwork)