JavaScript 有没有办法当查询某对象不存在某属性时返回一个默认值?
如题,需要实现的功能是我有某对象 A,程序中调用 A 时会不可预期地访问其属性,而这个属性他不一定有。可否实现当访问 A 没有的属性时,调用某个函数,给他生成一个动态的返回值。
就是类似像 java 的 @value 和 python 的魔术方法那样的功能,js 有办法实现吗,寻一 js 大佬,谢谢。
如题,需要实现的功能是我有某对象 A,程序中调用 A 时会不可预期地访问其属性,而这个属性他不一定有。可否实现当访问 A 没有的属性时,调用某个函数,给他生成一个动态的返回值。
就是类似像 java 的 @value 和 python 的魔术方法那样的功能,js 有办法实现吗,寻一 js 大佬,谢谢。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/%E5%8F%AF%E9%80%89%E9%93%BE
真想吹甜度好歹拿 optional chaining 来聊
foo?.bar??exp;
当然你可以用 lodash:
_.get(aa, ‘bb.cc.dd’, defaultValue)
方法已经告诉你了,“调用某个函数,给他生成一个动态的返回值”这种需求就不用我教了吧。
那么我满足你的希望随便说几个吧
写 python 的同学,至少我在填遗留老坑的时候 xx or None 基本写到吐的,(xx or {‘foo’: None})[‘foo’] 也能用
写 php 的,在老一点的时代,defined(‘XX’) or die 也是写到吐的, $datasource->getSomeArray() || []也是基本操作
再梳理一下,你说的特性其实只依赖于“布尔以外的类型可以直接参与逻辑运算,并有合理的 falsy 定义” 以及 “上述逻辑运算结果为真时返回原始输入值而不是 true”,这两件事情几乎任何弱类型语言或者是会做动态推断的强类型语言都是满足的,我刚才在路上把后面那个特性说成短路求值了是不准确的,短路求值涉及到类似用法中有副作用的用法,换成你喜欢的 js 的话大概就是
(await request(‘has_auth’)) || alert(‘没有权限!’)
这个样子
defined( ‘XX’ ) or die; 不是常规操作吗 … 空取常量最低也是个 warning … php8 里升到了 fatal …
也就是在我的认知里 … 这种写法并不是「在老一点的时代」才用 … 相反在未来肯定会越用越多 …
我想了半天 … 怎么都觉得这不是操作符能够压得住的事情 …
所以我想问 … 是不是说有什么我不知道的方式可以简化这种写法 ..?
?额我说“写到吐”就是指这种写法基本操作,不是说有什么更好的,不如说就是因为一个奇怪的语法糖却没啥更好的替代品所以才看到烦……
还是我没理解对你的疑问?
关于时代新老的问题,主要是慢慢单入口框架或者不把无关文件放在 public 的做法更常见了,所以就不需要这句话了,composer psr 的话就更不用了,psr 规定了声明类的文件不能有副作用
我说的是这个用法是特指什么 IN_DISCUZ 之类的,用一个常量存在性确保文件不被 webserver 错误地执行的用法,否则不会 or die 的吧,还是你说的以后用的更多是$x = defined(‘XX’) or ‘default value’; 这种? 这种的话确实随着严重级别上调,用的更多说得通……虽然我是 NOTICE 当 bug 修的选手
我的侧重点在那句「在老一点的时代」 … 也不知道怎么就以为是说新的时代就有更方便的写法了 …
原来是说新的时代里这种写法不那么常见了 … 那确实没毛病 …
另 … Notice 当 bug 修是没错的 … error_reporting( E_ALL ); 是自信心和技术力的表现 …