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 Study Notes学习笔记 (二)
Aug 04 Javascript
js中call与apply的用法小结
Dec 28 Javascript
jquery 3D 标签云示例代码
Jun 12 Javascript
Javascript中的apply()方法浅析
Mar 15 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
Jul 31 Javascript
Wireshark基本介绍和学习TCP三次握手
Aug 15 Javascript
深入理解Javascript中的作用域链和闭包
Apr 25 Javascript
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
Sep 25 Javascript
VUE 实现复制内容到剪贴板的两种方法
Apr 24 Javascript
详解iframe跨域的几种常用方法(小结)
Apr 29 Javascript
JQuery的加载和选择器用法简单示例
May 13 jQuery
微信小程序HTTP接口请求封装代码实例
Sep 05 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笔记 字符串处理
2010/10/19 PHP
PHP动态分页函数,PHP开发分页必备啦
2011/11/07 PHP
基于PHP选项与信息函数的使用详解
2013/05/10 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
2013/07/03 PHP
2014年最新推荐的10款 PHP 开发框架
2014/08/01 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
2015/02/10 PHP
php实现无限级分类查询(递归、非递归)
2016/03/10 PHP
非常实用的php验证码类
2016/05/15 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
一些常用的Javascript函数
2006/12/22 Javascript
js获取上传文件大小示例代码
2014/04/10 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
jQuery实现DIV层收缩展开的方法
2015/02/27 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
AngularJS基础 ng-selected 指令简单示例
2016/08/03 Javascript
Vue.js系列之vue-router(上)(3)
2017/01/03 Javascript
vue之数据交互实例代码
2017/06/20 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
基于vue+canvas的excel-like组件实例详解
2017/11/28 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
webpack优化之代码分割与公共代码提取详解
2019/11/22 Javascript
wxPython中文教程入门实例
2014/06/09 Python
Python的Flask框架与数据库连接的教程
2015/04/20 Python
详解Python中列表和元祖的使用方法
2015/04/25 Python
Python处理文本文件中控制字符的方法
2017/02/07 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
2018/10/29 Python
如何使用python把ppt转换成pdf
2019/06/29 Python
解决Python import docx出错DLL load failed的问题
2020/02/13 Python
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
Python测试框架:pytest学习笔记
2020/10/20 Python
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
怎样声明接口
2014/09/19 面试题
如何进行Linux分区优化
2016/09/13 面试题
务虚会发言材料
2014/12/25 职场文书
正规借条模板
2015/05/26 职场文书
教师节作文之小学四年级
2019/09/03 职场文书