Where is the Unreachable Code?

The Firefox Developer Editions dev tool JavaScript console is giving me

:small_red_triangle:SyntaxError: unreachable code after return statement

for this code (deminified by me for easier reading)

eval("/*!
 * jQuery Cookie Plugin
 * https://github.com/carhartl/jquery-cookie
 *
 * Copyright 2011, Klaus Hartl
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.opensource.org/licenses/GPL-2.0
 */

(function($) {
    $.cookie = function(key, value, options) {

        // key and at least value given, set cookie...
        if (arguments.length > 1 && (!/Object/.test(Object.prototype.toString.call(value)) || value === null || value === undefined)) {
            options = $.extend({}, options);

            if (value === null || value === undefined) {
                options.expires = -1;
            }

            if (typeof options.expires === 'number') {
                var days = options.expires, t = options.expires = new Date();
                t.setDate(t.getDate() + days);
            }

            value = String(value);
            return (document.cookie = [
                encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(value),
                options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
                options.path    ? '; path=' + options.path : '',
                options.domain  ? '; domain=' + options.domain : '',
                options.secure  ? '; secure' : ''
            ].join(''));
        }

        // key and possibly options given, get cookie...
        options = value || {};
        var decode = options.raw ? function(s) { return s; } : decodeURIComponent;

        var pairs = document.cookie.split('; ');
        for (var i = 0, pair; pair = pairs[i] && pairs[i].split('='); i++) {
            if (decode(pair[0]) === key) return decode(pair[1] || ''); // IE saves cookies with empty string as \"c; \", e.g. without \"=\" as opposed to EOMB, thus pair[1] may be undefined
        }
        return null;
    };
})(jQuery);
" + "
//# sourceURL=jquery.cookie");

As far as I can see, all of the returns are in if if blocks or ternary ifs, and I don’t see any that will necessarily always return, so what is unreachable? Am I not seeing something? Is the console pranking me?

Sticking the code into jsbin reports the following as the first error:

Line 42: Expected a conditional expression and instead saw an assignment.

after getting rid of the eval( off the front.

ha, I was looking at the "return"s for the culprit and missed seeing
for (var i = 0, pair; pair = pairs[i] && pairs[i].split('='); i++) {

So the code chokes at pair = pairs[i] && pairs[i].split('=') because pairs[i] might be a boolean but split returns an array or empty string?

Odd that this would go unnoticed since 2011

This topic was automatically closed 91 days after the last reply. New replies are no longer allowed.