宇宙外面是什么呢? 估计这个问题要困扰很多人, 让我们用一段 javascript 代码来回答一下.
一, 从一段代码说起
var 地球 = {
名字 : "地球",
女友 : "月亮",
外面 : {
名字 : "太阳系",
老大 : "太阳",
老二 : {
名字 : "木星",
二奶 : "木卫二(Europa)", // eclipse 3.3版本代号(欧罗巴)
小三 : "木卫三(Ganymede)"// eclipse 3.4版本代号(盖尼米德)
},
外面 : {
名字 : "银河系",
外面 : {
名字 : "宇宙",
年龄 : 13700000000
}
}
}
};
var 宇宙 = 地球.外面.外面.外面;
alert("宇宙的年龄是: " + 宇宙.年龄 + ", " + "宇宙的外面是: " + 宇宙.外面);
// alert("宇宙的外面在哪: " + 宇宙.外面.位置);
怎么运行呢? 很简单, 拷贝出来, 以谷歌浏览器 Chrome 为例, 按 F12, 出来开发人员工具, 选择最右端的 Console, 粘贴, 回车!答案即可揭晓:
看到了吗? 华丽丽的一个 undefined(未定义)
二, 自然语言由于过于灵活而失去严谨与精确
其实看了代码我们就已经明白是这样的结果了, 在这里我想说什么呢? 我们的日常语言其实是很不严谨, 很不精确的, 当层次很多时甚至引发了矛盾我们却还浑然不知, 以下图为例
我想这就是很多人的宇宙观, 里面的一层层都有着明确的边界, 但到了宇宙这一层面, 则是一种开放式的定义, 是没有边界的. 但当这种层次很多时, 我们常常忘记了我们前面预设的一些前提.
比方说, 你不会去问一个女生说: “你的JJ有多长之类的”
请原谅一时没有想到更好的例子~
因为这很明显是一个有问题的问题, 如果问题本身就有问题, 又怎么能去正确地回答呢?
古语云: 皮之不存, 毛将附焉!
当皮都没有的时候, 你问皮上的毛是什么颜色, 显然无法回答, 所以这位女生最好的回答大概只能是纠正你说: "木有小JJ!"当然了, 我们肯定不会去问这类问题, 因为矛盾太明显了.
但有时候矛盾很隐藏得比较深, 比如这个宇宙外面是什么的问题, 我们常常先认定了宇宙是开放的, 是没有边界的, 而我们说里面, 外面则又暗示了它有个明确的边界.
毕竟只有有明确的边界我们才能去说"里面"和"外面", 所以这里面是有矛盾的, 除非我们先把宇宙是否有边界的这一前提讨论清楚, 不然讨论后一个问题就没有意义.
三, 编程语言则相对严谨精确得多
在 javascript 中, 你要是没有定义, 就相当于前提都没达成, undefined
既不是是, 也不是否,
当然了, 在编程中这个常常可以当成
false
, 但如果使用严格等于去判断, 即三个等号===
, 那么它跟false
是不等的.
既没有说它是什么, 也没有说它不是什么. undefined
就是 undefined
, 就是未定义. 连外面都还没定义, 你却试图问宇宙外面是什么, 自然就是 undefined
了. 如果你试图跳过它去进一步追问 “宇宙.外面.位置”:
那么运行时 javascript 就会给你报错了. 当然你写的时候是很自由的, javascript 没有编译的概念, 你写错了不运行它也不知道, 不过现在的 IDE 也很强大了, 以我使用的 eclipse 为例, 当你敲入 “宇宙.” 之时, 提示就已经出来了
我们可以看到, 除了核心 javascript 中的几个属性和方法之外, 就是我们定义的"名字"与"年龄"两个属性了. 根本就没有所谓的"外面", 当然也更谈不上"外面.位置"了!