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 相关文章推荐
让你的CSS像Jquery一样做筛选的实现方法
Jul 10 Javascript
javaScript NameSpace 简单说明介绍
Jul 18 Javascript
javascript常用代码段搜集
Dec 04 Javascript
jQuery实现仿百度帖吧头部固定导航效果
Aug 07 Javascript
理解JS绑定事件
Jan 19 Javascript
原生Javascript插件开发实践
Jan 09 Javascript
AngularJS Select(选择框)使用详解
Jan 18 Javascript
vue使用axios跨域请求数据问题详解
Oct 18 Javascript
谈谈vue中mixin的一点理解
Dec 12 Javascript
通过实例学习React中事件节流防抖
Jun 17 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
Dec 12 Javascript
Vue-router 报错NavigationDuplicated的解决方法
Mar 31 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分页实例代码分享
2011/07/28 PHP
使用dump函数,给php加断点测试
2013/06/25 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
2014/06/09 PHP
php 利用array_slice函数获取随机数组或前几条数据
2015/09/30 PHP
javascript 命名规则 变量命名规则
2010/02/25 Javascript
面向对象Javascript核心支持代码分享
2012/05/23 Javascript
window.open不被拦截的实现代码
2012/08/22 Javascript
让AJAX不依赖后端接口实现方案
2012/12/03 Javascript
javascript中创建对象的几种方法总结
2013/11/01 Javascript
jquery如何判断某元素是否具备指定的样式
2013/11/05 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
2013/11/25 Javascript
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
2014/08/03 NodeJs
javascript函数声明和函数表达式区别分析
2014/12/02 Javascript
js实现异步循环实现代码
2016/02/16 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
js仿拉勾网首页穿墙广告效果
2017/03/08 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
AngularJs 延时器、计时器实例代码
2017/09/16 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
2018/01/12 Javascript
搭建基于express框架运行环境的方法步骤
2018/11/15 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
2020/08/28 Javascript
python类和函数中使用静态变量的方法
2015/05/09 Python
Python3实现的字典、列表和json对象互转功能示例
2018/05/22 Python
flask-socketio实现WebSocket的方法
2018/07/31 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
Python为何不能用可变对象作为默认参数的值
2019/07/01 Python
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
白宫黑市官网:White House Black Market
2016/11/17 全球购物
后勤副校长自我鉴定
2013/10/13 职场文书
函授药学自我鉴定
2014/02/07 职场文书
祖国在我心中演讲稿400字
2014/05/04 职场文书
乡镇爱国卫生月活动总结
2014/06/25 职场文书
研究生就业推荐表导师评语
2014/12/31 职场文书
财政局个人总结
2015/03/04 职场文书
教你如何让spark sql写mysql的时候支持update操作
2022/02/15 MySQL