使用代理可实现数据写入时的验证,通过set拦截器检查属性值是否符合规则,如类型和范围限制,并支持将验证逻辑抽离为可复用的配置对象。

在JavaScript中,使用代理(Proxy)可以拦截对象的操作,比如读取、写入属性。利用这个特性,可以在数据写入时进行验证,确保数据符合预期规则。
创建带验证逻辑的代理
通过定义 set 拦截器,可以在设置属性值时执行验证函数。如果数据不合法,抛出错误;否则允许赋值。
例如,限制某个对象的属性只能是特定类型或范围内的值:
const validator = { set(target, property, value) { // 验证 age 必须是 0-150 的数字 if (property === 'age') { if (typeof value !== 'number' || value 150) { throw new Error('age 必须是 0 到 150 之间的数字'); } } // 验证 name 必须是非空字符串 if (property === 'name') { if (typeof value !== 'string' || value.trim() === '') { throw new Error('name 必须是非空字符串'); } } // 符合条件则保存值 target[property] = value; return true; }};const user = new Proxy({}, validator);user.name = 'Alice'; // 成功user.age = 25; // 成功// user.name = ''; // 抛错:name 必须是非空字符串// user.age = -5; // 抛错:age 必须是 0 到 150 之间的数字
支持动态验证规则
可以将验证规则抽离成配置对象,让代理更通用。
动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
508 查看详情
这样能复用验证逻辑,适用于不同结构的数据:
function createValidatedObject(rules) { return new Proxy({}, { set(target, property, value) { const validator = rules[property]; if (validator && !validator(value)) { throw new Error(`属性 ${property} 的值无效`); } target[property] = value; return true; } });}const user = createValidatedObject({ email: (val) => typeof val === 'string' && val.includes('@'), age: (val) => Number.isInteger(val) && val >= 0 && val <= 150});user.email = 'test@example.com'; // 成功user.age = 30; // 成功// user.email = 'invalid'; // 抛错// user.age = -10; // 抛错
处理嵌套属性和只读字段
Proxy 默认只拦截顶层属性,若需验证嵌套对象,可递归代理或在验证函数中深入检查。
立即学习“Java免费学习笔记(深入)”;
例如,在设置对象时对子属性也进行校验:
const person = new Proxy({}, { set(target, property, value) { if (property === 'address') { if (!value || typeof value !== 'object' || !value.city) { throw new Error('address 必须包含 city 字段'); } } target[property] = value; return true; }});person.address = { city: 'Beijing' }; // 成功// person.address = {}; // 抛错:缺少 city
基本上就这些。用 Proxy 做数据验证,灵活又透明,不影响正常操作的同时保障数据完整性。
以上就是在JavaScript中,如何利用代理(Proxy)实现数据验证?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/738515.html
微信扫一扫
支付宝扫一扫