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 相关文章推荐
JavaScript中的迭代器和生成器详解
Oct 29 Javascript
jQuery的text()方法用法分析
Dec 20 Javascript
JavaScript实现数字数组按照倒序排列的方法
Apr 06 Javascript
获取阴历(农历)和当前日期的js代码
Feb 15 Javascript
canvas绘制万花筒效果(代码分享)
Jan 20 Javascript
jQuery EasyUI 折叠面板accordion的使用实例(分享)
Dec 25 jQuery
在nginx上部署vue项目(history模式)的方法
Dec 28 Javascript
vue通过点击事件读取音频文件的方法
May 30 Javascript
JavaScript实现简单轮播图效果
Dec 01 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
May 13 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
Jun 20 Javascript
在HTML5 localStorage中存储对象的示例代码
Apr 21 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
数据库中排序的对比及使用条件详解
2012/02/23 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
2015/08/16 PHP
php实现的单一入口应用程序实例分析
2015/09/23 PHP
Zend Framework开发入门经典教程
2016/03/23 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
php简单处理XML数据的方法示例
2017/05/19 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
JavaScript调试工具汇总
2014/12/23 Javascript
原生JS和jQuery操作DOM对比总结
2017/01/19 Javascript
JS中setTimeout和setInterval的最大延时值详解
2017/02/13 Javascript
jquery实现轮播图效果
2017/02/13 Javascript
javascript 单例模式详解及简单实例
2017/02/14 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
Element input树型下拉框的实现代码
2018/12/21 Javascript
JS合并两个数组的3种方法详解
2019/10/24 Javascript
JS原形与原型链深入详解
2020/05/09 Javascript
基于JS实现table导出Excel并保留样式
2020/05/19 Javascript
原生JS实现多条件筛选
2020/08/19 Javascript
JavaScript实现网页动态生成表格
2020/11/25 Javascript
Python JSON格式数据的提取和保存的实现
2019/03/22 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
2019/04/16 Python
德国专业木制品经销商:Holz-Direkt24
2019/12/26 全球购物
生物化工工艺专业应届生求职信
2013/10/08 职场文书
热情服务标语
2014/10/07 职场文书
市场部经理岗位职责
2015/02/02 职场文书
花田少年史观后感
2015/06/16 职场文书
selenium.webdriver中add_argument方法常用参数表
2021/04/08 Python
看看如何用Python绘制小米新版天价logo
2021/04/20 Python
Django项目如何正确配置日志(logging)
2021/04/29 Python
python 爬取天气网卫星图片
2021/06/07 Python
Nginx配置之实现多台服务器负载均衡
2021/08/02 Servers
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers
python解析照片拍摄时间进行图片整理
2022/07/23 Python