读JS代码遇到一段看不懂运算优先级的代码,如下
var BrowserSys = {}; var ua = navigator.userAgent.toLowerCase(); var s; (s = ua.match(/msie ([\d.]+)/)) ? BrowserSys.ie = s[1] : (s = ua.match(/firefox\/([\d.]+)/)) ? BrowserSys.firefox = s[1] : (s = ua.match(/chrome\/([\d.]+)/)) ? BrowserSys.chrome = s[1] : (s = ua.match(/crios\/([\d.]+)/)) ? BrowserSys.chrome = s[1] : (s = ua.match(/opera.([\d.]+)/)) ? BrowserSys.opera = s[1] : (s = ua.match(/version\/([\d.]+).*safari/)) ? BrowserSys.safari = s[1] : 0;
经查证三目运算符是右结合性的, 如 a ? b : c ? d : e ? f : g 根据运算优先级等价于 a ? b : (c ? d : (e ? f : g )),故以上JS代码运算顺序亦可知。