-3

Toady 私は省略形の構文で少し遊んでいました..そして、長く退屈なif構文を書くための 2 つの新しいクールな方法を見つけ、クロージャーについての新しいことも学びました...

これは私が思いついたものです。

これは、1 つの 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、および他のブラウザーがサポートしていないさまざまなものを使用していますが、それとは別に...この省略形の構文は古い/他のブラウザーで機能しますか?

追伸: jsfiddle でコードを片付けないでください。そうしないと、何も機能しません。


私はいくつかの答えを得た後に編集..

いくつかの便利な略記

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. ポイントは、常にこの方法で JavaScript を記述するのではなく、優れたコードを保持し、この方法で手動で書き直して高速で短いコードにすることです。
  3. あなたがコメントで読むことができるように、「ねえ、私ができることを見てください!」...再び...私はこの関数を投稿する前にこれについて知りませんでした。当時はクロムでしかテストしていませんでした.そして、そうです、私は何年も前からjavascriptを書いています...しかし、この省略形とビット単位の演算子ではありません.これは私にとって新しい何か。
  4. いくつかの圧縮ユーティリティ yuy obfuscator などをテストした後、この方法でコードを圧縮できないことがわかりました。いずれにせよ、適切なコードを書く必要がありさまざまなコンプレッサーがそれを行うことを望んでいません。手動でコードを縮小しますか? ...はい、それは私がやろうとしていることです。

これらすべての反対票に対して質問禁止を受けました。しかし、なぜそんなに多くの反対票を獲得したのか本当にわかりません... plsはあなたの反対票を説明してください

4

1 に答える 1

5

三項演算子 について言及している場合?:、はい、すべてのブラウザでサポートされています。

次のように使用されます。

condition ? ifTrue : ifFalse

例えば:

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

また、 or 演算子を参照している場合は||、それも同様です。例えば:

a || b || c

これにより、 、 、および から最初の変数が検出され、偽でない最初の変数a( bc、など)が選択されます。undefined0falseNaN

于 2013-08-22T22:57:10.507 に答える