简写的javascript语法是否适用于旧版浏览器?

时间:2013-08-22 22:54:41

标签: javascript

Toady我用简写语法玩了一点..发现了2个很酷的方法可以写出长期无聊的if语法,还学习了关于闭包的新东西......

这与我的出现有关。

这是一个带有一个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以及其他各种浏览器不支持的东西,但是从那开始...这个简写语法是否适用于旧版/其他浏览器?

ps.:不要整理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;

edit2

  1. 我真的不知道这种类型的关闭和短缺
  2. 关键是不要一直以这种方式编写javascript,而是保持一个很好的代码 然后以这种方式手动重写它以获得更快 SHORTER 代码
  3. 正如你可以在评论中看到的那样“嘿,看看我能做些什么!” ......再次......在我发布这个功能之前我还不知道这个,我只测试过在当时的chrome.And是我几年来写的JavaScript ...但不是这个简写&amp;按位运算符。这对我来说是新的东西。
  4. 测试了一些压缩实用程序yuy obfuscator以及更多我发现他们无法像这样压缩你的代码所以无论如何你必须写一个好的代码并且不希望各种压缩器为你做这个你想手动缩小你的代码吗? ... 是的我想做什么。
  5. 我对所有这些downvotes都有一个问题禁令。但我真的不明白为什么我有这么多的downvotes ... 请解释你的downvotes

1 个答案:

答案 0 :(得分:3)

如果您指的是三元运算符?:,那么是的,所有浏览器都支持。

它的使用方式如下:

condition ? ifTrue : ifFalse

例如:

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

如果您指的是或运算符||,那么也是如此。例如:

a || b || c

这将找到abc中的第一个变量,并选择第一个不是 falsy 的变量({{1} },undefined0false等。)