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 相关文章推荐
addRule在firefox下的兼容写法
Nov 30 Javascript
编辑浪子版表单验证类
May 12 Javascript
js获取图片长和宽度的代码
Nov 24 Javascript
jQuery EasyUI API 中文文档 - ComboTree组合树
Oct 11 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
Oct 29 Javascript
如何学习Javascript入门指导
Nov 01 Javascript
JavaScript实现函数返回多个值的方法
Jun 09 Javascript
jQuery对html元素的取值与赋值实例详解
Dec 18 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
Jul 12 Javascript
前端常见跨域解决方案(全)
Sep 19 Javascript
详解vue axios二次封装
Jul 22 Javascript
vue 点击按钮增加一行的方法
Sep 07 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
调频问题解答
2021/03/01 无线电
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
PHP源码之explode使用说明
2011/08/05 PHP
下拉列表多级联动dropDownList示例代码
2013/06/27 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
2017/08/15 PHP
PHP删除数组中指定下标的元素方法
2018/02/03 PHP
PHP中检查isset()和!empty()函数的必要性
2019/02/13 PHP
JS异常处理的一个想法(sofish)
2013/03/14 Javascript
封装的jquery翻页滚动(示例代码)
2013/11/18 Javascript
js+css实现导航效果实例
2015/02/10 Javascript
AngularJS基础 ng-model-options 指令简单示例
2016/08/02 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
详解JS中的柯里化(currying)
2017/08/17 Javascript
node中间层实现文件上传功能
2018/06/11 Javascript
详解如何用typescript开发koa2的二三事
2018/11/13 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
mpvue开发音频类小程序踩坑和建议详解
2019/03/12 Javascript
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
python的类变量和成员变量用法实例教程
2014/08/25 Python
python中split方法用法分析
2015/04/17 Python
tensorflow 输出权重到csv或txt的实例
2018/06/14 Python
Python中将两个或多个list合成一个list的方法小结
2019/05/12 Python
MSC邮轮官方网站:加勒比海、地中海和世界各地的假期
2018/08/27 全球购物
英国健身仓库:Bodybuilding Warehouse
2019/03/06 全球购物
汉米尔顿手表官网:Hamilton
2020/09/13 全球购物
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
导游的职业规划书范文
2013/12/27 职场文书
法人单位适用的授权委托书
2014/09/19 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
2014年大学班长工作总结
2014/11/14 职场文书
上市公司财务总监岗位职责
2015/04/03 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书
SQL注入的实现以及防范示例详解
2021/06/02 MySQL