Мне нравится этот трюк ... но это безопасно в JavaScript - PullRequest
0 голосов
/ 10 марта 2010

Основная проблема, о которой я думаю, заключается в том, является ли назначение переменной в операторе if безопасным и надежным в разных браузерах. Если это безопасно, я хотел бы использовать это.

Здесь он читает строку запроса, и если переменная строки запроса SN является либо Twitter, либо Facebook, то она вводит переменную if, и вы можете использовать эту переменную, если переменная строки запроса не существует или является каким-либо другим значением, то она переходит в 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 ]

5 голосов
/ 10 марта 2010

Он является частью языкового дизайна и должен работать в любом браузере, но его очень трудно читать.

4 голосов
/ 10 марта 2010

Это ужасно.

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

Довольно забавно, что в заголовке «if» была бы эта отвратительная конструкция, но в списке аргументов «alert» это было бы выражение «if» вместо «?:»: - )

Кроме того, чтобы хотя бы немного сочувствовать намеченному стилю, это пример того, для чего предназначено выражение "let" в ультрасовременном Javascript.

0 голосов
/ 10 марта 2010
location.socialNetwork== (function(){
 var s= location.search || '';
 s= /SN=([a-zA-Z]+)/.exec(s) || [];
 return s[1] || null;

})()

alert(location.socialNetwork)
0 голосов
/ 10 марта 2010

Боже мой! Это верно и должно работать всегда, при условии, что вы создаете переменную socialNetwork в другом месте, никогда не создавайте подразумеваемые глобальные переменные. Тем не менее, это действительно странный способ решить вашу проблему. Почему бы не создать функцию, которая возвращает социальную сеть, чтобы немного ее абстрагировать?

Тем не менее, если вы действительно хотите однострочное решение, как насчет этого?:

alert(function(){ var m = /SN=([A-Za-z]+)/.exec(window.location.search); return (m ? m[1] : null)}());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...