检查对象是否有特定密钥的最防弹方法是:
Object.prototype.hasOwnProperty.call(obj, key)这提供了一定的保证:只有当key是obj的直接属性时,它才能计算为obj,并且即使obj没有通常的Object作为它的原型(例如,如果它是用const obj = Object.create(null)创建的),它也会工作。
但这是一口。
在ES6或更高版本(包括多填充或Babel-可编译的“建议”)中,是否有任何新的语法/方法可以提供同样的保证,但以更好、更易读的方式?
发布于 2021-08-12 15:30:48
将Object.hasOwn添加到对象标准API中。现在所有主要浏览器都支持它。
发布于 2022-11-30 15:03:39
对于那些想的人来说,节省了一些时间
我做了一些改进,直接使用Javascript/Typescript函数,享受!)
static getStaticStyleParams(gmapJson: Record<string, any>[]) {
function isColor(value: string) {
return /^#[0-9a-f]{6}$/i.test(value.toString());
}
function toColor(value: string) {
return `0x${value.slice(1)}`;
}
function parse() {
const currentItems: string[] = [];
const separator = '|';
currentItems.length = 0;
for (let i = 0; i < gmapJson.length; i++) {
const item = gmapJson[i];
const hasFeature = Object.prototype.hasOwnProperty.call(item, 'featureType');
const hasElement = Object.prototype.hasOwnProperty.call(item, 'elementType');
const stylers = item.stylers;
let target = '';
let style = '';
if (!hasFeature && !hasElement) {
target = 'feature:all';
} else {
if (hasFeature) {
target = `feature:${item.featureType}`;
}
if (hasElement) {
target = target ? target + separator : '';
target += `element:${item.elementType}`;
}
}
for (let s = 0; s < stylers.length; s++) {
const styleItem = stylers[s],
key = Object.keys(styleItem)[0]; // there is only one per element
style = style ? style + separator : '';
style += `${key}:${isColor(styleItem[key]) ? toColor(styleItem[key]) : styleItem[key]}`;
}
currentItems.push(target + separator + style);
}
return currentItems;
}
return `&style=${parse().join('&style=')}`;
}https://stackoverflow.com/questions/45215727
复制相似问题