当前位置: 首页 > news >正文

(八)前端,如此简单!---五组结构

js中有五个结构,共同构成了处理网络请求与响应的核心 API,覆盖从构建请求、管理元数据到解析数据的完整链路。

一、URL

consturl=newURL('https://api.example.com/users?id=123&name=张三#section1')url.protocol// "https:" 协议url.hostname// "api.example.com" 域名url.port// "" 空字符串 默认端口(https=443/http=80)url.pathname// "/users" 路径url.search// "?id=123&name=张三" 参数url.hash// "#section1" 哈希constparams=url.searchParams;// 操作查询参数params.append('page','1');// 增params.delete('page');// 删params.set('name','李四');// 改params.get('name');// 查console.log(params.toString());// 返回查询字符串 "id=123&name=%E5%BC%A0%E4%B8%89"

二、Headers

constheaders=newHeaders({'Content-Type':'application/json'// 初始化时设置请求体格式为 JSON});headers.append('Authorization','Bearer token');// 增加认证头headers.delete('Authorization');// 删headers.set('Content-Type','text/plain');// 改 内容类型为纯文本headers.get('Content-Type');// 查headers.has('Content-Type')// 检查是否存在 用于检查是否存在

三、Request

constrequest=newRequest("https://api.example.com/users",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({"key":"value"})})request.url// "https://api.example.com/users"request.method// "POST"request.headers// headers对象request.body// ReadableStream 可读流(不能直接查看内容)

四、Response

constresponse=newResponse(JSON.stringify({success:true,data:{id:1,name:"张三"}}),{status:200,statusText:'ok',headers:{"Content-Type":"application/json"}})// 访问 Response 属性response.status// 200response.ok// true(状态码 200-299)response.statusText// "ok"response.url// "" (实际响应中会有值"https://api.example.com/users?id=123")response.headers// headers对象response.body// ReadableStream,只能读取一次。response.bodyUsed//表示响应体是否已被读取// Response 对象只能调用一次 json() 方法// 然后 response.bodyUsed就会变成true//其他消费响应体的方法:response.text()response.arrayBuffer()response.blob()response.formData()

五、json

JSON.stringify()// json对象转字符串JSON.parse()// 字符串转json对象JSON.stringify()遇到循环引用会抛出错误(TypeError),不能处理{a:1,self:a}
  • JSON.stringify() 的undefined 在对象中被忽略,在数组中转为 null
// 1. 对象属性 → 被忽略(不是 null!)JSON.stringify({a:undefined,b:1});// '{"b":1}' ← a 消失了,不是 "a":null// 2. 数组元素 → 转为 nullJSON.stringify([undefined,1]);// '[null,1]' ← 变成 null 了!// 3. 单独 undefinedJSON.stringify(undefined);// undefined ← 不是字符串 "undefined"
在对象中在数组中单独序列化
undefined被忽略(属性消失)转为null返回undefined(非有效JSON)
function被忽略转为null返回undefined
Symbol被忽略转为null返回undefined
Symbol 是 ES6 引入的原始数据类型,表示唯一的标识符。
// 第三方库和自己代码都用了 'id'constlibId=Symbol('id');constmyId=Symbol('id');constobj={[libId]:'库的ID',[myId]:'我的ID'};// 互不干扰!console.log(libId===myId);// false 永远唯一
  • JSON.parse() 不会忽略任何值,但会严格遵循 JSON 规范:
输入结果说明
'null'null解析为 null 值
'undefined'报错undefined不是有效的 JSON
'"undefined"'"undefined"字符串"undefined",合法
'{"a": undefined}'报错属性值不能是 undefined
'{"a": null}'{a: null}✅ 正常解析
'{"a": 1, "b": undefined}'报错整个对象解析失败

JSON.stringify() 的第二个参数可以是一个数组,用于指定对象中哪些属性需要被序列化。

constuser={name:'Alice',age:30};// 只序列化 name属性constjsonString=JSON.stringify(user,['name']);console.log(jsonString);// 输出:{"name":"Alice"}

JSON.parse() 的第二个参数 reviver 是一个函数,它在解析过程中对每个键值对调用一次。返回值将作为该键的新值。

constuser='{"name": "Alice", "age": "30"}';// JSON 规范要求键和字符串值必须使用 双引号constobj=JSON.parse(user,(key,value)=>value);// reviver 函数(此处原样返回)console.log(obj.name);// "Alice"console.log(obj.age);// "30"
http://www.jsqmd.com/news/562923/

相关文章:

  • 2026年3月房产中介房源管理系统使用体验评测
  • OpenDataLab MinerU解决办公难题:智能识别PPT与扫描件
  • Freeswitch实战指南:核心命令与变量操作全解析
  • 老蒋博客创始人揭秘:从技术极客到行业意见领袖的成长之路
  • 5月1日截止!AppLovin不更新邓白氏,广告费全停
  • CVE-2024-7592、CVE-2024-6232、CVE-2024-9287漏洞排查
  • 【实战指南】110kV变电站电气设计全流程解析:从主变压器选型到防雷接地
  • 知名量化企业急招岗位!预算可达千万!不怕你薪资高,最怕你不来[牛呀]股票T0/Alpha投资经理资深量化研究员(应届也看)CTA投资经理量化C++系统开发工程师(应届也看)
  • TCC事务日志丢失导致资金差错?凌晨2点救火实录:如何用LogStore+Checkpoint双机制实现100%事务可追溯
  • FastbootEnhance:告别命令行,用图形化界面轻松管理Android刷机和分区
  • 别再手动画图了!用GOT10K Toolkit一键搞定主流跟踪器评估(附SiamFC实战)
  • AIGC培训线上VS线下,哪种更适合你?
  • 嵌入式通信协议:SPI、UART与I2C对比与应用
  • CAN总线错误处理实战与诊断方法
  • Hyperdown V1.1.0-百度网盘不限速下载神器!
  • 突破3大壁垒!MediaPipe TouchDesigner让实时视觉交互从技术难题到创意实现
  • SpringBoot整合poi-tl实战:如何优雅导出带动态表格和图片的Word并自动压缩成zip
  • 面向5G基站应用的低剖面三频段共享孔径天线阵列
  • 用 OpenClaw + 萤石云摄像头实现零成本智能看护:边缘视觉落地解法
  • 嵌入式系统驱动分离架构设计与实现
  • 光影证件照 v1.0.2-免费AI证件照神器!
  • 突破限制:KinhDown下载加速工具全面解析
  • ESP32 RMT驱动DHT22克隆传感器负温解析方案
  • 利用4G模块(EC200T)与花生壳实现UDP数据远程调试(内网穿透实战)
  • 从‘金手指’到‘金焊盘’:聊聊PCIe 4.0 AIC上那些容易被忽略的接地细节
  • ssm+java2026年毕设天商美食点评网【源码+论文】
  • (七)前端,如此简单!--- 四点读取
  • AsyncServoLib:嵌入式非阻塞舵机控制库详解
  • OpenPDF HTML转PDF高效实现:从功能解析到实战指南
  • 硬件设计学习路线:从焊接基础到SI/PI分析