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 相关文章推荐
IE8 引入跨站数据获取功能说明
Jul 22 Javascript
jQuery设置div一直在页面顶部显示的方法
Oct 24 Javascript
JS实现简单的顶部定时关闭层效果
Jun 15 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
May 16 Javascript
关于使用axios的一些心得技巧分享
Jul 02 Javascript
使用JS实现图片轮播的实例(前后首尾相接)
Sep 21 Javascript
p5.js入门教程之键盘交互
Mar 19 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
Dec 20 Javascript
4 种滚动吸顶实现方式的比较
Apr 09 Javascript
JQuery中的常用事件、对象属性与使用方法分析
Dec 23 jQuery
JS对象属性的检测与获取操作实例分析
Mar 17 Javascript
Vue OpenLayer测距功能的实现
Apr 20 Vue.js
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
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
2016/09/26 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
2017/05/23 PHP
javascript Object与Function使用
2010/01/11 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
2013/01/17 Javascript
详解JS 比较两个Json对象的值是否相等的实例
2013/11/20 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
JS实现兼容性较好的随屏滚动效果
2015/11/09 Javascript
浅析BootStrap中Modal(模态框)使用心得
2016/12/24 Javascript
javascript html5轻松实现拖动功能
2017/03/01 Javascript
js正则表达式验证表单【完整版】
2017/03/06 Javascript
js中字符型和数值型数字的互相转化方法(必看)
2017/04/25 Javascript
微信小程序 地图map实例详解
2017/06/07 Javascript
jQuery实现广告条滚动效果
2017/08/22 jQuery
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
[29:10]Ti4 冒泡赛第二天 NEWBEE vs Titan 3
2014/07/15 DOTA
python解决字典中的值是列表问题的方法
2013/03/04 Python
python实现批量获取指定文件夹下的所有文件的厂商信息
2014/09/28 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
python中logging库的使用总结
2017/10/18 Python
PyQt5 QTableView设置某一列不可编辑的方法
2019/06/25 Python
python飞机大战pygame游戏框架搭建操作详解
2019/12/17 Python
pycharm sciview的图片另存为操作
2020/06/01 Python
Python sublime安装及配置过程详解
2020/06/29 Python
Python模拟登录requests.Session应用详解
2020/11/17 Python
Django 权限管理(permissions)与用户组(group)详解
2020/11/30 Python
CSS3图片旋转特效(360/60/-360度)
2013/10/10 HTML / CSS
高级Java程序员面试要点
2013/08/02 面试题
运动会通讯稿300字
2014/02/02 职场文书
青春奉献演讲稿
2014/05/08 职场文书
2015试用期转正工作总结
2014/12/12 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
离职感谢信
2015/01/21 职场文书
2015公务员年度考核评语
2015/03/25 职场文书
退货证明模板
2015/06/23 职场文书
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python