JS中判断字符串存在和非空的方法


Posted in Javascript onSeptember 12, 2018

看到这个题目你是怎么想的呢?这个很简单啊,typeof 一下,再判断length。

if(typeof unknownVariable ==='string' && unknownVariable.length){
   ...
 }

搞定了吗?

如果这个字符串是用new String() 创建的会如何呢?typeof 这个未知变量肯定是 object。你会怎么办?
你肯定还得先判断类型,typeof unknownVariable==='object' ?但你得想还有一个null变量的 typeof 值也是 object。那是不是还得 && unknownVariable 一下?现在就是一个非空对象了,接着要不要判断一下length?应该不用了。但最后 typeof 是 object 的不一定是字符串对象啊,可以是别的对象,如数组、json对象、new 出来的别的对象等等。要怎么办呢?

这就要上一个很少用到但有用的方法了:valueOf。valueOf 会以变量原始类型的形式进行输出。

let str1="test"
  let str2=new String('test2')
  let arr1=[1,2,3]
  let fn1=function(){
    console.log('this is a function')
  }
  let obj1={
    name:'gpd'
  }
  let obj2=new Object()
  obj2.name='gpd' 
  str1.valueOf() // "test"
  str2.valueOf() //"test2"
  arr1.valueOf() //[1,2,3]
  fn1.valueOf() //fn1(){}
  obj1.valueOf() // {name:"gpd"}
  obj2.valueOf() // {name:"gpd"}

所以,无论你是字符串字面量还是new String 得到的一个字符串对象,它的valueOf值都是一个字符串字面量。然后,它的typeof 值都是 string 。

所以最后的判断的是

if(typeof unknownVariable !=undefined 
  && unknownVariable 
  && typeof unknowVariable.valueOf() === "string")
  {
    ...
  }
Javascript 相关文章推荐
jQuery 全选效果实现代码
Mar 23 Javascript
基于jquery的web页面日期格式化插件
Nov 15 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
Dec 19 Javascript
js 动态为textbox添加下拉框数据源的方法
Apr 24 Javascript
iframe里的页面禁止右键事件的方法
Jun 10 Javascript
Js实现网页键盘控制翻页的方法
Oct 30 Javascript
轻松掌握JavaScript中的Math object数学对象
May 26 Javascript
用file标签实现多图文件上传预览
Feb 14 Javascript
jQuery中的on与bind绑定事件区别实例详解
Feb 28 Javascript
JavaScript使用ZeroClipboard操作剪切板
May 10 Javascript
vue和webpack打包项目相对路径修改的方法
Jun 15 Javascript
JS实现简单tab选项卡切换
Oct 25 Javascript
React router动态加载组件之适配器模式的应用详解
Sep 12 #Javascript
微信小程序实现tab左右切换效果
Nov 15 #Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
Sep 11 #Javascript
vue项目中使用tinymce编辑器的步骤详解
Sep 11 #Javascript
VUE 实现滚动监听 导航栏置顶的方法
Sep 11 #Javascript
vue中的watch监听数据变化及watch中各属性的详解
Sep 11 #Javascript
vue axios数据请求get、post方法及实例详解
Sep 11 #Javascript
You might like
php Xdebug 调试扩展的安装与使用.
2010/03/13 PHP
PHP中=赋值操作符对不同数据类型的不同行为
2011/01/02 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
使用 PHPStorm 开发 Laravel
2015/03/24 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2016/01/12 PHP
php数组分页实现方法
2016/04/30 PHP
基于jQuery的输入框无值自动显示指定数据的实现代码
2011/01/24 Javascript
IE下使用cloneNode注意事项分享
2012/11/22 Javascript
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
JS实现可改变列宽的table实例
2013/07/02 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
2014/05/28 Javascript
javascript 构造函数方式定义对象
2015/01/02 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
2016/05/30 Javascript
jquery 动态增加删除行的简单实例(推荐)
2016/10/12 Javascript
详解mpvue开发微信小程序基础知识
2019/09/23 Javascript
js实现轮播图特效
2020/05/28 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
基于原生JS封装的Modal对话框插件的示例代码
2020/09/09 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
[01:00:30]TFT vs VGJ.T Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
python连接mysql调用存储过程示例
2014/03/05 Python
Python常用算法学习基础教程
2017/04/13 Python
纯用NumPy实现神经网络的示例代码
2018/10/24 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
python实现推箱子游戏
2020/03/25 Python
python创造虚拟环境方法总结
2019/03/04 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
2020/03/05 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
2021/01/21 Python
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
出国考察邀请函
2014/01/21 职场文书
2019大学生暑期实习心得总结
2019/08/21 职场文书
golang中实现给gif、png、jpeg图片添加文字水印
2021/04/26 Golang
Java如何实现通过键盘输入一个数组
2022/02/15 Java/Android