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 相关文章推荐
网站被黑的假象--ARP欺骗之页面中加入一段js
May 16 Javascript
jquery方法+js一般方法+js面向对象方法实现拖拽效果
Aug 30 Javascript
JS 两个字符串时间的天数差计算
Aug 25 Javascript
jquery购物车实时结算特效实现思路
Sep 23 Javascript
超全面的JavaScript开发规范(推荐)
Jan 21 Javascript
微信小程序 仿猫眼实现实例代码
Mar 14 Javascript
MUI  Scroll插件的使用详解
Apr 13 Javascript
js使用i18n实现页面国际化的方法
May 09 Javascript
vue使用技巧及vue项目中遇到的问题
Jun 04 Javascript
小程序自定义单页面、全局导航栏的实现代码
Mar 15 Javascript
Vue+tracking.js 实现前端人脸检测功能
Apr 16 Javascript
JS实现悬浮球只在一侧滑动并且是横屏状态下
Aug 19 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
利用discuz实现PHP大文件上传应用实例代码
2008/11/14 PHP
pdo中使用参数化查询sql
2011/08/11 PHP
php导入导出excel实例
2013/10/25 PHP
php使用curl发送json格式数据实例
2013/12/17 PHP
php 伪造ip以及url来路信息方法汇总
2014/11/25 PHP
PHP简单处理表单输入的特殊字符的方法
2016/02/03 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
2017/08/07 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
Jquery之美中不足小结
2011/02/16 Javascript
用nodejs实现PHP的print_r函数代码
2014/03/14 NodeJs
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
2016/11/04 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
2018/08/22 Javascript
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
javascript实现日历效果
2019/06/17 Javascript
Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign)
2019/11/21 Javascript
小程序实现图片预览裁剪插件
2019/11/22 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
[01:07:57]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第二场 1月19日
2021/03/11 DOTA
利用python实现数据分析
2017/01/11 Python
python 使用值来排序一个字典的方法
2018/11/16 Python
java判断三位数的实例讲解
2019/06/10 Python
Python从列表推导到zip()函数的5种技巧总结
2019/10/23 Python
python 串口读取+存储+输出处理实例
2019/12/26 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
一文轻松掌握python语言命名规范规则
2020/06/18 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
2014年高二班主任工作总结
2014/12/16 职场文书
技术转让协议书
2016/03/19 职场文书
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
Python实现打乒乓小游戏
2021/09/25 Python