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 相关文章推荐
JS远程获取网页源代码实例
Sep 05 Javascript
JavaScript自定义日期格式化函数详细解析
Jan 14 Javascript
js左右弹性滚动对联广告代码分享
Feb 19 Javascript
JavaScript Array对象扩展indexOf()方法
May 09 Javascript
JQuery实现鼠标移动图片显示描述层的方法
Jun 25 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
Jan 31 Javascript
JS转换HTML转义符的方法
Aug 24 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
Apr 04 jQuery
vue项目中使用百度地图的方法
Jun 08 Javascript
React之PureComponent的使用作用
Jul 10 Javascript
利用React Router4实现的服务端直出渲染(SSR)
Jan 07 Javascript
JavaScript实现音乐播放器
Aug 14 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
2006/12/23 PHP
php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
2010/12/02 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
PHP中Cookie的使用详解(简单易懂)
2017/04/28 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
2019/08/05 PHP
JQuery 1.3.2以上版本中出现pareseerror错误的解决方法
2011/01/11 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
Jquery中给animation加更多的运作效果实例
2013/09/05 Javascript
5个JavaScript经典面试题
2014/10/13 Javascript
jQuery中$.each使用详解
2015/01/29 Javascript
JavaScript操作Cookie方法实例分析
2015/05/27 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
Vue页面渲染中key的应用实例教程
2021/01/12 Vue.js
Python的函数嵌套的使用方法
2014/01/24 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
2018/05/31 Python
Python生成器generator用法示例
2018/08/10 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
python中字符串的编码与解码详析
2020/12/03 Python
利用HTML5画出一个坦克的形状具体实现代码
2013/06/20 HTML / CSS
YOINS官网:时尚女装网上购物
2017/03/17 全球购物
阿里健康官方海外旗舰店:阿里健康国际自营
2017/11/24 全球购物
关于递归的一道.NET面试题
2013/05/12 面试题
专科毕业生就业推荐信
2013/11/01 职场文书
高三英语教学反思
2014/01/13 职场文书
拓展策划方案
2014/06/03 职场文书
机关党建工作汇报材料
2014/08/20 职场文书
龙门石窟导游词
2015/02/02 职场文书
辞职信的写法
2015/02/27 职场文书
2015年幼儿园中班工作总结
2015/04/25 职场文书
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
2021/04/17 Vue.js
React forwardRef的使用方法及注意点
2021/06/13 Javascript
Spring Boot接口定义和全局异常统一处理
2022/04/20 Java/Android