2013-08-22 2 views
-4

Toady я играл немного с сокращенным синтаксисом .. и нашла 2 новых интересные способы сделать написать длинный синтаксис скучного if, также узнал что-то новое о замыканиях ...Работает ли сокращенный синтаксис javascript на старых браузерах?

это с тем, что я придумал.

Это функция переключения для меню аккордеона с одним eventHandler.

function h(e){ 
var p='parentNode',a=e.target,b=a[p],f=48,u='px',y=b[p]; 
!y.c||(y.c==b||(y.c.style.height=f+u,y.c.x=f)), 
y.c=y.c==b?null:b, 
a!=b.firstChild||(b.x=b.x>f?f: 
(f+b.childNodes[1].offsetHeight),b.style.height=b.x+u) 
} 

и вот пример.

http://jsfiddle.net/YjCbM/ (протестировано с Chrome 29)

произошла ошибка .. это работает http://jsfiddle.net/YjCbM/1/

В этом примере я использую e.target, WebKit CSS3 и различные другие вещи, которые то есть и другие браузеры дон 't поддержка, но appart от этого ... делает ли этот сокращенный синтаксис работать с более старыми/другими браузерами?

ps.:don't tiddy вверх код в jsfiddle или ничего работает


EDIT после того, как я получил некоторые ответы ..

Некоторые полезные Shorthands

var W=window,D=W.document,G='getElementById', 
E=W.addEventListener?'addEventListener':'attachEvent', 
// this awesome as i don't use jQuery. 
// this way i have a short getElementbyId() like jQuery's $() 
// and also a ie compatible addEventListener. 

a=D[G](x); 
//document.getElementById(x) 
a[E]('click',handler); 
//a.addEventListener() or a.attachEvent() 

a=x?y:x 
//if x is defined, true, or not 0 it will take the y value 
if (x == true) { 
a = y; 
}else{ 
a = x; 
} 

a=x||y; 
//if x is not defined it will take y 
if (x == true) { 
a = x 
}else{ 
a = y 
} 


x||(x=y,alert(x)) // <- this is fabulous 
// if x is not defined, not true, or 0 it will set the x with the y value 
// and alert x 
if (x == 'undefined') { 
x = y; 
alert (x); 
} 
// how manytimes did it happen that you wanted to do just a short check but you hat to 
//set 2-3 variables and could not use a simple a=x||y 
// whith this shorthand you can. 

var a = 1; 
var b; 
var c = a; 
// is the same as 
var a=1,b,c=a; 

Редакция2

  1. Я действительно не знал об этом типе замыканий и
  2. сокращения от
  3. Дело не в том, чтобы написать JavaScript Таким образом, все время, но сохранить хороший код , а затем вручную переписать его таким образом, чтобы иметь БЫСТРЕЕ и КОРОЧЕ код
  4. Как вы можете прочитать в комментариях «Эй, смотри, что я могу сделать!» ... снова ... я не знал об этом, прежде чем я разместил эти функции, и я тестировал только в хроме в то время. И да, я пишу javascript с лета ... но не с этим сокращением & побитовыми операторами. что-то новое для меня.
  5. После тестирования некоторых утилит сжатия yuy obfuscator и больше я обнаружил, что они не могут сжимать ваш код таким образом, поэтому в любом случае ВЫ ДОЛЖНЫ НАПРАВЛЯТЬ ХОРОШИЙ КОД и не надейтесь, что различные компрессоры сделают это для вас так что вы пытаетесь вручную усовершенствовать свой код? ... ДА ЭТО ЧТО Я ПЫТАЮСЬ ДЕЛАТЬ.

я получил вопрос запрета для всех этих downvotes. но я действительно не могу понять, почему у меня так много downvotes ... PLS объяснить ваши downvotes.

+0

Оператор запятой также должен поддерживаться всеми браузерами. –

+5

Прохладный, вам не нужен собеседник с таким кодом. –

+4

... вы пытаетесь вручную усовершенствовать свой код? Eesh, вы должны использовать лучшие имена переменных. – PherricOxide

ответ

3

Если вы имеете в виду тернарный оператор ?:, тогда да, который поддерживается во всех браузерах.

Он используется так:

condition ? ifTrue : ifFalse 

Например:

'You have ' + (milkAmount <= 0 ? 'no' : (milkAmount + ' cups')) + ' of milk!' 

А если вы имеете в виду или оператора ||, то да к тому же. Например:

a || b || c 

Найдет первую переменную из a, b и c и выберите первый, который не falsy (undefined, 0, false, NaN и т.д.).

+0

и hello || (x = 0, alert (r)) – cocco

+0

@cocco Да также – Doorknob

+0

@cocco: Логический оператор OR относится к самым основам языка, который я бы сказал. Вы можете ожидать, что эти вещи будут поддерживаться в браузерах. –

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