JavaScript对返回的http包数据类型的判断
2025-02-18 18:13:34
遇到一个后端使用雪花ID,返回ID给前端时,前端解析的ID与Http包的内容不一致的问题。
经过排查,可以看到结果的类型被Javascript解析成了number。
1 2 3 4 5 6 7 8 9 10 11 12
| Save Response: Object { data: 1891767091295240200, status: 200, statusText: "OK", headers: {…}, config: {…}, request: XMLHttpRequest } config: Object { url: "/api/books", method: "post", data: '{"name":"sdassssss","author":"","isbn":"","publishDate":"2025-02-18 16:29:46","category":"","introduction":"","total":"","stock":"","imageUrl":"","id":""}', … } data: 1891767091295240200 headers: Object { "cache-control": "no-cache, no-store, max-age=0, must-revalidate", connection: "close", "content-length": "19", … } request: XMLHttpRequest { readyState: 4, timeout: 100000, withCredentials: true, … } status: 200 statusText: "OK" <prototype>: Object { … }
Data Type: Number
|
原因是,因为data里只有数字字符,使用Json.parse解析会自动解析成Number类型。而雪花ID是64位的长整数,超出了Javascript的安全整数范围(其安全整数范围是-2^53 + 1
到2^53 - 1
),解析成Number类型时就可能会出错。
将整个对象返回,而不仅仅是返回一串数字字符就可以初步解决这个问题。