用js获取空文本框的值 为什么得到的是空字符串""而不是undefined?

在判断文本框是否为空的时候往往用到
用""也可以判断,但是undefined就不行,后来发现获取好的空文本框的值是一个空字符串而不是undefined;
所以想请教一下这是为什么?

阅读 10.3k
4 个回答

input,textarea默认都是字符串。没有内容就是空字符串。
可以理解为规范就是这样定的。

在 JS 中,undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性,

而 input 或 textarea 的 value 值是定义且为空的,看下例子:

var input = document.createElement('input');
input.value; //""

在 chrome 下调试,可以看到 value 的值确实为空,

clipboard.png

除了 title,好多值都是空的,就像一楼说的那样,可能这就是规范吧。

这个问题的原因是由于JavaScript实作的DOM介面的方法设计造成的。

一般取DOM元素值用的方法getElementById方法,它的回传设计是,如果DOM元素存在时,就回传值,如果该DOM不存在时,就回传null,在JavaScript中undefinednull是不同的东西,所以这里应该是null与有没有回传值的两种情况。与undefined没关系。

所以当DOM元素存在时,必定有回传值,对input或textarea等表单元素来说,回传的是value值,因为你没写它就是个空子串,当然是回传空字串。

DOM元素有value值是使用value值,那么,如果没有value属性时,预设值又是为何?一定是空字串吗?答案是有三种情况,最常见的是空字串,第二种是像checkbox与radio的选项时,没给value属性会回传on字串,最后一种也是只有一个有的特殊情况,是filename文档名称,它只有在<input type="file">才会用到。这些标准是由W3C所制定的,JavaScript只是遵守标准实作而已。标准可以参考这里:https://www.w3.org/TR/2012/WD...

另一个题外话是,实际上要取DOM元素的值在JavaScript中内建至少有6种方法可以取,但回传值的设计上与上面说的getElementById方法一样。参考: http://stackoverflow.com/ques...https://developer.mozilla.org...

value="";其中的""也算值啊,只不过是空字符串,但它确实是个值,undefined都没有值,连值都没有。它才是真正的没有值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题