te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - Are there any advantages to a nested IfElse instead of Else If's? - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Are there any advantages to a nested IfElse instead of Else If's? - Stack Overflow

programmeradmin3浏览0评论

I came across this unique practice in a browser detection script.

if (/MSIE/.test(_3)) {
    IE = true;
} else {
    if (/AppleWebKit/.test(_3)) {
        Safari = true;
    } else {
        if (/Opera/.test(_3)) {
            Opera = true;
        } else {
            if (/Camino/.test(_3)) {
                Camino = true;
            } else {
                if (/Firefox/.test(_3) || /Netscape/.test(_3) || ) {
                    Mozilla = true;
                }
            }
        }
    }
}

Are there any advantages to using this nested If/Else method?

What if I just changed it to:

 if (){
 } else if (){
 } else if (){
 } else if (){
 }

Would it run slower or anything?

I came across this unique practice in a browser detection script.

if (/MSIE/.test(_3)) {
    IE = true;
} else {
    if (/AppleWebKit/.test(_3)) {
        Safari = true;
    } else {
        if (/Opera/.test(_3)) {
            Opera = true;
        } else {
            if (/Camino/.test(_3)) {
                Camino = true;
            } else {
                if (/Firefox/.test(_3) || /Netscape/.test(_3) || ) {
                    Mozilla = true;
                }
            }
        }
    }
}

Are there any advantages to using this nested If/Else method?

What if I just changed it to:

 if (){
 } else if (){
 } else if (){
 } else if (){
 }

Would it run slower or anything?

Share Improve this question edited Nov 27, 2010 at 9:55 Sean Patrick Floyd 299k71 gold badges475 silver badges595 bronze badges asked Nov 27, 2010 at 9:49 Robin RodricksRobin Rodricks 114k147 gold badges414 silver badges617 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 11

It won't change anything other than the indentation and readability. Still the same code, absolutely equivalent :-) I would definitely change it though as it would make it more readable. Indentation usually means nesting whereas here there's no nesting.

This is known as "the arrow anti-pattern" (due to the resemblance to an arrowhead) ...

 if
   if
     if
       if
         do something
       endif
     endif
   endif
 endif

.. and it's almost always bad for readability, unless there is some pelling reason to leave it.

http://www.codinghorror./blog/2006/01/flattening-arrow-code.html

I would flatten it.

In this case the switch statement could also be used? Something like:

switch ((_3).match(/msie|applewebkit|opera|camino|firefox/i)[0]) {
  case 'MSIE' : /* ...; */ break;
  case 'AppleWebKit' : /* ...; */ break;
  /* ... etc. */
  default: BrowserCouldntBeDetermined = true;
}

I adhere to the previous answer: else if() is equivalent to but more readable then else { if () ...}

Anyway, the code you found and presented looks a bit clumsy and not really fast for other reasons than the way if...else is used. Concerning the meaning of the code (and aside from the question), a better way to take care of browser differences is by object detection I would say.

发布评论

评论列表(0)

  1. 暂无评论