一、JSON.parse

当使用JSON.parse转化一个非JSON时,往往会带来这个报错。
但是他们的详则又是格式不同的,具体的原因我还并不清楚,猜测和浏览器内核的处理方法有关。
现在为了日后筛查方便,先进行部分穷举记录。

JSON.parse(*) // . , & 等英文符号,均为此报错

Uncaught SyntaxError: Unexpected token '*'

JSON.parse(‘’)

  1. VM485:1 Uncaught SyntaxError: Unexpected end of JSON input
  2. at JSON.parse (<anonymous>)
  3. at <anonymous>:1:6

JSON.parse(‘aa’)

  1. VM130:1 Uncaught SyntaxError: Unexpected token aa in JSON at position 0
  2. at JSON.parse ()
  3. at :1:6
  4. (anonymous) @ VM129:1

JSON.parse(-)

Uncaught SyntaxError: Unexpected token ')'

JSON.parse({}) // 对象类均为此报错

  1. VM451:1 Uncaught SyntaxError: Unexpected token o in JSON at position 1
  2. at JSON.parse (<anonymous>)
  3. at <anonymous>:1:6

JSON.parse(undefined)

  1. VM550:1 Uncaught SyntaxError: Unexpected token u in JSON at position 0
  2. at JSON.parse (<anonymous>)
  3. at <anonymous>:1:6

JSON.parse(@) // 。,等中文符号,均为此报错

  1. Uncaught SyntaxError: Invalid or unexpected token

二、obj.()

发现这个的场景是,为了达到完全可配置的目的,使用了 eval(this.${name}()) 的写法。后面demo了一下,发现只要 .() 前面是个object,都可以触发。

let obj = {}; obj.()

Uncaught SyntaxError: Unexpected token '('