2013-11-12 4 views
-2

Может кто-нибудь объяснить мне это JS сокращенный код:Стенография в JS Объяснении

navigator.sayswho = (function(){ 
     var N= navigator.appName, ua= navigator.userAgent, tem; 
     var M= ua.match(/(opera|chrome|safari|firefox|msie|Trident)\/?\s*(\.?\d+(\.\d+)*)/i); 
     if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1]; 
     M= M? [M[1], M[2]]: [N, navigator.appVersion,'-?']; 
     return M; 
    })(); 

код работает, но я не могу понять, как это работает, особенно эта строка:

M= M? [M[1], M[2]]: [N, navigator.appVersion,'-?']; 
+0

Он говорит, что если M верно, M будет переназначен на [M [1], M [2 ]] или M будет переназначен на [N, navigator.appVersion, '-?']; –

+1

Это может помочь, если вы могли бы объяснить контекст этой функции. Нетрудно понять, что он делает, но если бы мы знали, почему * объяснение может быть улучшено. – Pointy

+0

Получил! Это хорошее объяснение. –

ответ

6

Это:

M= M? [M[1], M[2]]: [N, navigator.appVersion,'-?']; 

означает:

if (M) 
    M = [M[1], M[2]]; 
else 
    M = [N, navigator.appVersion, '-?']; 

Более подробно, он проверяет, не является ли «M» непустым, что в этом случае означает, что регулярное выражение useragent соответствует фактической строке useragent. Если он установлен, он сбрасывает «M» в новый массив; эффективно он просто опускает нулевой элемент оригинала «М».

Если это не набор, он создает «поддельный» массив из имени приложения, строки версии и того, что кажется маркерной строкой, чтобы указать, что это непризнанный пользовательский агент.

+0

Спасибо за объяснение! Приветствия. –

0
M= M? [M[1], M[2]]: [N, navigator.appVersion,'-?']; 

здесь M является boolean type переменная содержит истинным или ложным

т.е.

if(M) 
    M = [M[1], M[2]]; 
else 
    M = [N, navigator.appVersion,'-?']; 
+0

Спасибо, что для объяснения. Ура! –

Смежные вопросы