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 相关文章推荐
将HTML自动转为JS代码
Jun 26 Javascript
jquery遍历input取得input的name
Apr 27 Javascript
jquery $("#variable") 循环改变variable的值示例
Feb 23 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
Sep 13 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
Feb 26 Javascript
JS上传图片预览插件制作(兼容到IE6)
Aug 07 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
Jan 11 Javascript
基于JavaScript实现类名的添加与移除
Apr 23 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
May 01 jQuery
jQuery实现对网页节点的增删改查功能示例
Sep 18 jQuery
自己动手封装一个React Native多级联动
Sep 19 Javascript
vue或react项目生产环境去掉console.log的操作
Sep 02 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
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
咖啡店都有些什么常规豆子呢?有什么风味在里面
2021/03/04 咖啡文化
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
PHP调用全国天气预报数据接口查询天气示例
2019/02/20 PHP
Jquery 监视按键,按下回车键触发某方法的实现代码
2014/05/11 Javascript
javascritp添加url参数将参数加入到url中
2014/09/25 Javascript
深入理解在JS中通过四种设置事件处理程序的方法
2017/03/02 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
2017/04/10 jQuery
深究AngularJS之ui-router详解
2017/06/13 Javascript
JavaScript转换数据库DateTime字段类型方法
2017/06/27 Javascript
在vue组件中使用axios的方法
2018/03/16 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
微信分享invalid signature签名错误踩过的坑
2020/04/11 Javascript
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python基础教程之序列详解
2014/08/29 Python
Python中type的构造函数参数含义说明
2015/06/21 Python
python实现下载指定网址所有图片的方法
2015/08/08 Python
python操作mysql数据库
2017/03/05 Python
使用pandas对矢量化数据进行替换处理的方法
2018/04/11 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
使用tensorflow实现矩阵分解方式
2020/02/07 Python
如何将PySpark导入Python的放实现(2种)
2020/04/26 Python
python中如何写类
2020/06/29 Python
python 使用三引号时容易犯的小错误
2020/10/21 Python
python接口自动化框架实战
2020/12/23 Python
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
优秀教师个人总结
2015/02/11 职场文书
老乡聚会通知
2015/04/23 职场文书
2015年公务员个人工作总结
2015/04/24 职场文书
大学毕业晚会开场白
2015/05/29 职场文书
红白喜事主持词
2015/07/06 职场文书
2016年大学生寒假社会实践心得体会
2015/10/09 职场文书
matlab xlabel位置的设置方式
2021/05/21 Python
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python
nginx配置限速限流基于内置模块
2022/05/02 Servers