拨打d3.select("input[type=checkbox]").property("checked", undefined)
时的预期行为是什么?
是否应该将其视为假,因此将checked
属性设置为false
/删除,或者将其视为无值,从而调用.property("checked")
,getter?< / p>
答案 0 :(得分:1)
属性方法
d3_selectionPrototype.property = function (name, value) {
if (arguments.length < 2) {
if (typeof name === "string") return this.node()[name];
for (value in name) this.each(d3_selection_property(value, name[value]));
return this;
}
return this.each(d3_selection_property(name, value));
};
当您传入值undefined
时,由于您已经传入了2个参数,它会调用d3_selection_property(对于选择中的每个条目),这是
function d3_selection_property(name, value) {
function propertyNull() {
delete this[name];
}
function propertyConstant() {
this[name] = value;
}
function propertyFunction() {
var x = value.apply(this, arguments);
if (x == null) delete this[name]; else this[name] = x;
}
return value == null ? propertyNull : typeof value === "function" ? propertyFunction : propertyConstant; }
当值=== undefined时,非严格比较(最后一行)value == null
的计算结果为true,因此调用propertyNull
delete this[name];
但是,由于checked
属性实际上并不在this
对象上(它实际上是DOM元素原型链的一级),这实际上什么也没做。
总而言之,它返回选择(如所有可链接的d3方法那样),但它不会修改实际的检查值。
根据文档 - https://github.com/mbostock/d3/wiki/Selections
如果指定了value,则将具有指定名称的属性设置为 所有选定元素的指定值。
但根据当前的代码,如果指定的值为undefined