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 相关文章推荐
JavaScript 异步调用框架 (Part 6 - 实例 & 模式)
Aug 04 Javascript
javascript parseInt与Number函数的区别
Jan 21 Javascript
JS自动适应的图片弹窗实例
Jun 29 Javascript
iframe窗口高度自适应的实现方法
Jan 08 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
Dec 11 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
Mar 04 Javascript
jQuery使用Selectator插件实现多选下拉列表过滤框(附源码下载)
Apr 08 Javascript
基于vue.js轮播组件vue-awesome-swiper实现轮播图
Mar 17 Javascript
解决vue接口数据赋值给data没有反应的问题
Aug 27 Javascript
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
Sep 25 Javascript
jQuery利用FormData上传文件实现批量上传
Dec 04 jQuery
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
Sep 26 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 empty() 检查一个变量是否为空
2011/11/10 PHP
PHP浮点比较大小的方法
2016/02/14 PHP
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
js nextSibling属性和previousSibling属性概述及使用注意
2013/02/16 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
2013/12/12 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
Nodejs中 npm常用命令详解
2016/07/04 NodeJs
vue组件的写法汇总
2018/04/12 Javascript
vue打包相关细节整理(小结)
2018/09/28 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
js实现ATM机存取款功能
2020/10/27 Javascript
Vue.js实现备忘录功能
2019/06/26 Javascript
d3.js实现图形拖拽
2019/12/19 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
2020/02/20 Javascript
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
Python 调用DLL操作抄表机
2009/01/12 Python
2款Python内存检测工具介绍和使用方法
2014/06/01 Python
Python进阶篇之字典操作总结
2016/11/16 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
python中如何设置代码自动提示
2020/07/15 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
Geekbuying波兰:购买中国电子产品
2019/10/20 全球购物
社会实践感言
2014/01/25 职场文书
业绩考核岗位职责
2014/02/01 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
金榜题名主持词
2015/07/02 职场文书
劳动模范获奖感言
2015/07/31 职场文书
2015教师个人年度工作总结
2015/10/23 职场文书
投资入股协议书
2016/03/22 职场文书
Nginx开启Brotli压缩算法实现过程详解
2021/03/31 Servers
Python的代理类实现,控制访问和修改属性的权限你都了解吗
2022/03/21 Python