JSON parse在各浏览器的兼容性列表

外国某JS高手Asen Bozhilov 做的统计表,趁没被墙前立即抱回来!


var JSONTest = (function (global) {

    var JSON = global.JSON,

        NATIVE_JSON_PARSE_SUPPORTED = JSON != null && typeof JSON.parse == 'function',

        ASSERT_ERROR, parse;

    

    ASSERT_ERROR = [

        /**

         * Empty string is not a valid JSONValue 

         */

        "",

        

        /**

         * Evaluating ECMAScript expression is not allowed in JSONText

         */

         "eval('6 * 6') == 36",

         

        /**

         * ECMAScript list is not allowed as JSONValue

         */ 

         '"str", "str"',         

                

        /**

         * ECMA-262-5

         * JSONString :

         * JSONStringCharacter :: See 15.12.1.1

         * JSONSourceCharacter but not double-quote " or backslash \ or U+0000 thru U+001F

         */

        '"""', '"\\"',

        '"\x00"', '"\x01"', '"\x02"', '"\x03"', '"\x04"', '"\x05"', '"\x06"', '"\x07"',

        '"\x08"', '"\x09"', '"\x0a"', '"\x0b"', '"\x0c"', '"\x0d"', '"\x0e"', '"\x0f"',

        '"\x10"', '"\x11"', '"\x12"', '"\x13"', '"\x14"', '"\x15"', '"\x16"', '"\x17"',

        '"\x18"', '"\x19"', '"\x1a"', '"\x1b"', '"\x1c"', '"\x1d"', '"\x1e"', '"\x1f"',

        

        /**

         * ECMA-262-5

         * JSONEscapeSequence :: See 15.12.1.1

         * Cannot contain HexEscapeSequence 

         */

         '"\\xF1"',

         

        /**

         * ECMA-262-5

         * JSONEscapeSequence :: See 15.12.1.1

         * Cannot contain OctalEscapeSequence

         */

         '"\\101"',             

                    

        /**

         * ECMA-262-5

         * JSONNumber :: See 15.12.1.1

         * - opt DecimalIntegerLiteral JSONFraction opt ExponentPart opt

         */

        '+2', '2.', '.2',

        

        /**

         * ECMA-262-5

         * JSONNumber :: See 15.12.1.1  

         * Cannot contain OctalIntegerLiteral 

         */ 

         '00', '01', '02', '03', '04', '05', '06', '07', '08', '09',

         

        /**

         * ECMA-262-5

         * JSONNumber :: See 15.12.1.1  

         * Cannot contain HexIntegerLiteral 

         */  

         '0xFF',        

    

        /**

         * ECMA-262-5

         * JSONMember : See 15.12.1.2

         * JSONString : JSONValue

         */

        '{property : false}',

        "{'property' : false}",

        

        /**

         * JSONNumber is not allowed as property name

         */

         '{2 : false}',

         

        /**

         * true, false and null are not allowed as property name 

         */

         '{true : false}',

         '{false : false}',

         '{null  : false}', 

        

        /**

         * ECMA-262-5

         * JSONMemberList : See 15.12.1.2

         * Trailing coma is not allowed in JSONMemberList:

         */

         '{"property": "value",}',

         

        /**

         * ECMA-262-5

         * JSONElementList : See 15.12.1.2

         * Trailing coma is not allowed in JSONElementList :

         */  

         '["value", "value",]',

         

         /**

          * ECMA-262-5

          * JSONWhiteSpace :: See 15.12.1.1

          *   <TAB> 

          *   <CR> 

          *   <LF> 

          *   <SP> 

          */

          

          /**

           * Vertical Tab <VT> is not allowed in JSONWhiteSpace

           */

           '[\u000B]',

           

          /**

           * Form Feed <FF> is not allowed in JSONWhiteSpace

           */

           '[\u000C]',

            

          /**

           * No-break space <NBSP> is not allowed in JSONWhiteSpace

           */

           '[\u00A0]',

             

          /**

           * Byte Order Mark <BOM> is not allowed in JSONWhiteSpace

           */  

           '[\uFEFF]',

           

          /**

           * Other category 鈥淶s鈥�

           * Any other Unicode 鈥渟pace separator鈥� <USP> are not allowed in JSONWhiteSpace

           */

           '[\u1680]', '[\u180E]', '[\u2000]', '[\u2001]', '[\u2002]', '[\u2003]', '[\u2004]', '[\u2005]', '[\u2006]', '[\u2007]', '[\u2008]', '[\u2009]', '[\u200A]', '[\u202F]', '[\u205F]', '[\u3000]'

    ];

    

    return {

       parse : function () {

            for (var i = 0, j = 2, len = ASSERT_ERROR.length; i < len; i++, j++) {

                try {

                    JSON.parse(ASSERT_ERROR[i]);

                    this.print(j, false, "Allowed syntax");

                }catch (e) {

                    if (e instanceof SyntaxError) {

                        this.print(j, true, "SyntaxError");

                    }

                    else {

                        this.print(j, false, "Undefined behavior");

                    }

                }

            }

        },

        

        print : function (idx, pass, msg) {

            var row = this.table.rows[idx],

                cell = row.cells[1];

                

            cell.className = pass ? 'yes' : 'no';

            cell.innerHTML = msg;

        },

        

        run : function () {

            this.table = document.getElementById('json-table');

            this.print(1, NATIVE_JSON_PARSE_SUPPORTED, 'Yes');

            if (NATIVE_JSON_PARSE_SUPPORTED) {

                this.parse();

            }    

        }

    };

})(this);

JSON text This implementation   FF 3.6.6 FF 4.0 beta IE8 IE9 Beta Opera 11 (build 1055) Chrome 6.0.472 Safari 5 (6533.16) json2 in FF 3.6.6
JSON.parse -   Yes Yes Yes Yes Yes Yes Yes Yes
JSON.parse(''); -   SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
eval('6 * 6') == 36; -   SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
"str", "str" -   SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
""" -   SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
"\" -   SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
"\u0000" -   Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0001" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0002" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0003" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0004" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0005" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0006" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0007" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0008" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0009" -   Allowed syntax SyntaxError Allowed syntax SyntaxError Allowed syntax SyntaxError Allowed syntax Allowed syntax
"\u000a" -   Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
"\u000b" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u000c" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u000d" -   Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
"\u000e" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u000f" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0010" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0011" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0012" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0013" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0014" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0015" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0016" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0017" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0018" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0019" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u001a" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u001b" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u001c" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u001d" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u001e" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u001f" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\xF1" -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
"\101" -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
+2 -   Allowed syntax Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
2. -   Allowed syntax Allowed syntax Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
.2 -   Allowed syntax Allowed syntax Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
00 -   Allowed syntax Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax
01 -   Allowed syntax Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax
02 -   Allowed syntax Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax
03 -   Allowed syntax Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax
04 -   Allowed syntax Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax
05 -   Allowed syntax Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax
06 -   Allowed syntax Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax
07 -   Allowed syntax Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax
08 -   Allowed syntax Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax
09 -   Allowed syntax Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax
0xFF -   SyntaxError - SyntaxError SyntaxError - SyntaxError - SyntaxError
{property : false} -   SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
{'property' : false} -   SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
{2 : false} -   SyntaxError - - - - SyntaxError - Allowed syntax
{true : false} -   SyntaxError - - - - SyntaxError - Allowed syntax
{false : false} -   SyntaxError - - - - SyntaxError - Allowed syntax
{null : false} -   SyntaxError - - - - SyntaxError - Allowed syntax
{"property" : "value",} -   Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
["value", "value",] -   Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u000B] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax Allowed syntax
[\u000C] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax Allowed syntax
[\u00A0] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\uFEFF] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
[\u1680] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
[\u180E] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
[\u2000] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u2001] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u2002] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u2003] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u2004] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u2005] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u2006] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u2007] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u2008] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u2009] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u200A] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u202F] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
[\u205F] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
[\u3000] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax

你可能感兴趣的:(parse)