js中连写两个?:三元运算符语法解释

在angular 源码中有连写两个三元运算符的代码:

var hash = isString(hash) ? hash : isNumber(hash) ? hash.toString() :$location.hash;

上述代码等价于:
if(isString(hash)){
return hash;
}else{
if(isNumber(hash)){
return hash.toString();
}else{
return $location.hash;
}
}
验证代码如下所示:
 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>连写两个三元运算符的执行顺序</title>
</head>
<body>
<!--下面这两个script 脚本中的自执行匿名函数证明了连写连个三元运算符的执行顺序是从左到右顺序执行。-->
<script> // hash = isString(hash) ? hash : isNumber(hash) ? hash.toString() : $location.hash();
(function (hash) {
isString=function (str) {
return toString.call(str)=='[object String]'?true:false;
}
isNumber=function (number) {
return toString.call(number)=='[object Number]'?true:false;
} var hash = isString(hash) ? hash : isNumber(hash) ? hash.toString() :"人生";
alert(hash);
})("ouyangfeng");
</script>
<script>
(function (hash) {
isString=function (str) {
return toString.call(str)=='[object String]'?true:false;
}
isNumber=function (number) {
return toString.call(number)=='[object Number]'?true:false;
}
function getHash() {
if(isString(hash)){
return hash;
}else{
if(isNumber(hash)){
return hash.toString();
}else{
return "人生";
}
}
}
var hash=getHash(hash);
alert(hash);
})("");
</script>
<style>
</body>
</html>
上一篇:Js 模式匹配


下一篇:关于@RestController注解(转发)