引言
我们常说凡事皆有两面性,其实也就是说凡事都具有不确定性,今天我们就来说说前端开发中的这种不确定性。
Checkbox的不确定性
大家都知道Checkbox有两种状态:选中和未选中。这在实际应用中一般是没有问题的,但是如果应用目标包含多个子级,就会出现问题:比如一个文件夹,假设里面有10个文件,如果全部选中这10个文件,我们可以说它是“选中”的;如果一个文件也不选,我们可以说它是“未选中”的;但是如果只选中其中5个文件,那么我们该如何描述呢?
显而易见,这个时候这个文件夹的状态具有不确定性。那么如何表示这种不确定性状态呢?事实上,Checkbox元素已经有一个叫做indeterminate
的属性(property)可以用来表示这种不确定性状态了。
想了解更多详情,请查看这篇文章:Indeterminate Checkboxes。
JavaScript变量的不确定性
首先我们来定义一个变量foo
:
|
|
我们都知道这个变量等于undefined
:
|
|
现在我们假设有一个变量bar
,但是我们并没有实际定义这个变量,我们不妨称之为“虚变量”。那怎么访问这个“虚变量”呢?我们知道JavsScript执行时有一个上下文对象this
,我们可以用this.bar
来访问它。
那么问题来了,你觉得下面这行代码的输出结果是怎么样的?
|
|
如果你测试一下就会发现结果是true
!是不是有点不合逻辑?一个未定义(或者说完全不存在)的变量(“虚变量”)竟然会等于一个已定义的变量(“实变量”)!
现在我们来简单梳理一下:
- 一个未定义的变量等于
undefined
,这是可以理解的。 - 一个已定义且已赋值的变量,等于其对应值,这也是可以理解的。
- 一个已定义但未赋值的变量,应该等于什么?
显而易见,这个时候这个变量的值具有不确定性。那么JavsScript里面有没有什么东西可以表示这种状态呢?目前好像没有。
所以我觉得未来的JavsScript应该考虑到这样情况,提供相应的标识符来表示这种状态。比如说增加一个全局属性indeterminate
,所有已定义但未赋值的变量都等于这个值:
|
|
结语
总之……(此处省略一万字)
最后提个问题,下面代码的输出结果是怎么样的?
假如已经实现了上面提到的全局属性indeterminate
,那么结果又可能是怎么样的?
|
|