JS中判断字符串存在和非空的方法

看到这个题目你是怎么想的呢?这个很简单啊,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")
  {
    ...
  }
(0)

相关推荐

  • JS非空验证及邮箱验证的实例

    非空验证 <body> <table> <tr> <td>姓名:</td> <td><input type="text" name="TrueName" id="TrueName" /></td> </tr> ....省略其他input <tr> <td colspan="2"> <inpu

  • js中el表达式的使用和非空判断方法

    注意,这里想说的不是jsp里面嵌套的el表达式的使用,而是在js中使用. 场景: 页面跳转后,使用spring mvc向前端页面传过来一个json对象,要在js中获取后,做处理. 返回的json对象: {"nodes":[{"contactmobile":"15922208502","orderno":"XNH31918062989476864"},{"id":"12198&q

  • Linux 删除文件夹和文件的命令(强制删除包括非空文件)

    linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可. 直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字 -r 就是向下递归,不管有多少级目录,一并删除 -f 就是直接强行删除,不作任何提示的意思 1.删除文件夹实例: rm -rf /var/log/httpd/access 将会删除/var/log/httpd/access目录以及其下所有文件.文件夹 2.删除文件使用实例: rm -f /var/log

  • MySQL查询空字段或非空字段(is null和not null)

    现在我们先来把test表中的一条记录的birth字段设置为空. mysql> update test set t_birth=null where t_id=1; Query OK, 1 row affected (0.02 sec) Rows matched: 1  Changed: 1  Warnings: 0 OK,执行成功! 设置一个字段值为空时的语法为:set <字段名>=NULL 说明一下,这里没有大小写的区分,可以是null,也可以是NULL. 下面看看结果: mysql&

  • StringUtils工具包中字符串非空判断isNotEmpty和isNotBlank的区别

    在项目中,我们用的最多的是StringUtils中的非空判断方法,相信大部分人都用过IsNotEmpty或者isEmpty方法 今天我们要提到的,是isNotBlank public static boolean isNotEmpty(String str) 判断某字符串是否非空,等于!isEmpty(String str),这里不能排除空格字符 下面是示例: StringUtils.isNotEmpty(null) = false StringUtils.isNotEmpty("")

  • Node.JS循环删除非空文件夹及子目录下的所有文件

    最近要实现一个循环文件夹的功能,文件夹可能不是空的,还可能带有子文件夹和文件,网上找了一些现有的库,但是都不提供删除进度.所以就自己写了一个. var fs = require('fs') var path = require('path') var remove = function(tarPath, cb, removeStates) { if (!removeStates) { removeStates = { cur: 0, all: 0 } } else { if (!removeSt

  • php rmdir使用递归函数删除非空目录实例详解

     首先向大家介绍一下rmdir()函数. php rmdir()函数 rmdir - 删除空目录 语法: bool rmdir ( string $dirname [, resource $context ] ) 尝试删除 dirname 所指定的目录. 该目录必须是空的,而且要有相应的权限. 失败时会产生一个E_WARNING级别的错误. 参数: 1.dirname:目录的路径. 2.context:在 PHP 5.0.0 中增加了对上下文(Context)的支持. php rmdir()删除

  • jQuery实现批量判断表单中文本框非空的方法(2种方法)

    本文实例讲述了jQuery实现批量判断表单中文本框非空的方法.分享给大家供大家参考,具体如下: 方法一: <script type="text/javascript"> /* * 批量验证表单非空 * 需要非空验证控件的样式class="mustadd" */ $(".mustadd").each(function(){ if($(this).val() == ''){ alert("该项不可为空!"); $(th

  • phalcon model在插入或更新时会自动验证非空字段的解决办法

    对phalcom框架不了解的朋友可以点击了解下. phalcon框架使用指南 在使用phalcon的insert和update功能时,因为数据库所有的字段设置的都是NOT NULL,而phalcon的model在插入或更新之前会自动判断字段是否需要必填,因此导致有空字段时无法存入. 开始遇到这问题时,想到两种解决方法: 一.改数据库字段,把NOT NULL改为可以为空. 但该数据库还得去找DBA,而且为了性能,DBA要求一般没有特殊情况,字段必须是NOT NULL,所以该方案否决. 二.给可以为

  • JS判断非空至少输入两个字符的简单实现方法

    dialog是我项目方法,你应该替换成alert(),或者你自己的 var str = $("#stuName").val(); if (str.length < 2) { dialog("提示", "text:请输入至少两位字符", 300, "auto", ""); return false; } str = str.replace(/(^\s*)|(\s*$)/g, '');//去除空格; if

随机推荐