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 相关文章推荐
侧栏跟随滚动的简单实现代码
Mar 18 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
Apr 19 Javascript
ie7+背景透明文字不透明超级简单的实现方法
Jan 17 Javascript
实现js保留小数点后N位的代码
Nov 13 Javascript
JS比较两个数值的大小实例
Nov 25 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
Sep 13 Javascript
JS实现图片放大镜插件详解
Nov 06 Javascript
详解swipe使用及竖屏页面滚动方法
Jun 28 Javascript
JavaScript实现简单的计算器
Jan 16 Javascript
vue父子模板传值问题解决方法案例分析
Feb 26 Javascript
js代码实现轮播图
May 04 Javascript
javascript实现移动端上传图片功能
Aug 18 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/11/09 PHP
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
Yii框架视图、视图布局、视图数据块操作示例
2019/10/14 PHP
Yii框架小部件(Widgets)用法实例详解
2020/05/15 PHP
JQuery中如何传递参数如click(),change()等具体实现
2013/04/28 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
js的for in循环和java里foreach循环的区别分析
2015/01/28 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
2015/09/22 Javascript
JavaScript 模块的循环加载实现方法
2015/12/13 Javascript
全面了解JavaScript对象进阶
2016/07/19 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
修改ligerui 默认确认按钮的方法
2016/12/27 Javascript
jquery+css实现简单的图片轮播效果
2017/08/07 jQuery
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
2019/05/06 Javascript
微信小程序实现Session功能及无法获取session问题的解决方法
2019/05/07 Javascript
基于JavaScript实现控制下拉列表
2020/05/08 Javascript
Echarts.js无法引入问题解决方案
2020/10/30 Javascript
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
Python中你应该知道的一些内置函数
2017/03/31 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
2017/05/18 Python
浅谈对yield的初步理解
2017/05/29 Python
Django中使用第三方登录的示例代码
2018/08/20 Python
python 画三维图像 曲面图和散点图的示例
2018/12/29 Python
Python之字典添加元素的几种方法
2020/09/30 Python
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
本科生求职简历的自我评价
2013/10/21 职场文书
师德学习感言
2014/01/31 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
医院合作意向书范本
2015/05/08 职场文书
2019幼儿园感恩节活动策划书
2019/11/28 职场文书
微软Win11 全新照片应用面向 Dev预览版推出 新版本上手体验图集
2022/09/23 数码科技