Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JS字符串false转boolean

JS字符串false转boolean

作者头像
用户6182664
发布于 2020-05-06 06:27:51
发布于 2020-05-06 06:27:51
13.9K10
代码可运行
举报
运行总次数:0
代码可运行

大家都知道在JS的世界里, 0-0null""falseundefinedNaN,这些都可以自动转化为布尔的 false,那么字符串的"false"是不是false呢,答案是否定的,if ("false") 来判断的话,是等于true

所以今天遇到个SB问题,就是后台velocity往前台传参,大家一般都是这么写。

0.背景

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var hasAuth = $!auth ; // 这个auth就是利用velocity传到前台的

这么写就有一个风险,那就是,如果后台忘记往前台传这个参数,就造成了如下的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var hasAuth = ; // 语法错误,因为;之前是个空,这是由于velocity木有传参,前台是自然而然的变成了空白,空白!!

1.解决1

那么如何解决这种因为前后端不分离,velocity忘记传到前台而产生的这个问题呢,当当当当,我想到了一个办法就是利用单引号将变量括住,这样后台不传参,我也不怕不怕啦,代码变成了这样

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var hasAuth = '$!auth' ; // 这样就好啦,即使后台不传参到前台,我特么也不怕报语法错误了。

2.解决2

然而事情并没有到此结束,因为我发现如果后台没有忘记往前台传参,后台获得的权限绝逼不是true就是false,那么问题来了,代码经过渲染变成了下面这个样纸。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var hasAuth = 'true';

//或者

var hasAuth = 'false';

那么下面再做判断的时候呢

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 1.

var hasAuth = 'true';
if(hasAuth){ //此时的hasAuth是true
  
}

// 2.
var hasAuth = 'false';
if(hasAuth){ //此时的hasAuth还是true
  
}

日了狗了,这该如何是好!!!

3.解决3

我特么灵机一动,那么我用Boolean的构造方法去做处理岂不是就ok了?我特么太聪明了,于是这么写

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var hasAuth = Boolean('$!auth');

还是和刚才一样

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 1.当后台传到前台的auth是true时,Boolean('$!auth') === Boolean('true') === true;

var hasAuth = 'true';
if(hasAuth){ //此时的hasAuth是true
  
}

// 2.当后台传到前台的auth是false时,Boolean('$!auth') === Boolean('false') === true;
var hasAuth = 'false';
if(hasAuth){ //此时的hasAuth还是true
  
}

日了狗了,为咩啊

4.解决4

我查阅了一下w3c,发现解释如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var myBoolean=new Boolean();

// 下面的所有的代码行均会创建初始值为 false 的 Boolean 对象。
var myBoolean=new Boolean();
var myBoolean=new Boolean(0);
var myBoolean=new Boolean(null);
var myBoolean=new Boolean("");
var myBoolean=new Boolean(false);//不带单引号的是false
var myBoolean=new Boolean(NaN);
// 下面的所有的代码行均会创初始值为 true 的 Boolean 对象:
var myBoolean=new Boolean(1);
var myBoolean=new Boolean(true);
var myBoolean=new Boolean("true");
var myBoolean=new Boolean("false");//带单引号的字符串false最终等于true
var myBoolean=new Boolean("Bill Gates");

靠了,这条路也想不通,可爱的一休哥,赶紧想想注意啊!

5.解决5 最终解决方案

灵机一动,哇塞,那么我用字符串去对比字符串总可以了吧?

于是最终的检测方法如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var hasAuth = '$!auth' === 'true' ;

// 1.$!auth 为 true 时

var hasAuth = 'true' === 'true' ;
console.log(hasAuth);//true

// 2.$!auth 为 false 时

var hasAuth = 'false' === 'true' ;
console.log(hasAuth);//false

当然也可以如下玩

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String.prototype.bool = function() { 
    return (/^true$/i).test(this); 
}; 
console.log("true".bool()); 
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java程序员那些事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
我今天也遇到了这个问题;我是从localStoreage中取参数的时候出现了这个问题;解决方案是:const val = val === 'ture' 😂 本来写了个三元表达式,再看的时候就被自己笑到了。
我今天也遇到了这个问题;我是从localStoreage中取参数的时候出现了这个问题;解决方案是:const val = val === 'ture' 😂 本来写了个三元表达式,再看的时候就被自己笑到了。
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
❤万字长文JS全网最细笔记①(全网最强,建议收藏)❤
大家好,我是会写Bug又会Rap的XiaoLin。遇事先百度,学习关注我,今天我们来学学JavaScript
上分如喝水
2021/08/16
1K0
❤万字长文JS全网最细笔记①(全网最强,建议收藏)❤
JavaScript——字符串对象
为了方便操作基本数据类型,JavaScript还提供了三个特殊的引用类型:Srting、Number和 Boolean
岳泽以
2022/10/26
4190
JavaScript——字符串对象
第11天:JS中变量、字符串基础知识
js页面效果:轮播图、选项卡、地图、表单验证javascript是弱变量类型的语言,变量只需要用var来声明。而java要根据变 量类型来声明,
半指温柔乐
2018/09/11
1.8K0
【ES6基础】模板字符串(Template String)
模板字符串是ES6中非常重要的一个新特性,这个特性使得我们处理相关业务变得更加容易。比如在处理嵌入表达式、多行字符串、字符串中插入变量、字符串格式化等方面的应用。模板字符串使用反钩号(backticks,`),而不是单引号或双引号。以下是个简单的示例:
前端达人
2019/04/18
6.8K0
【ES6基础】模板字符串(Template String)
JavaScript 学习-11.字符串 String 对象
前言 JavaScript 中定义字符串可以用单引号或双引号,用于存储一系列字符。 字符串 声明一个变量的值是字符串类型,可以用单引号和双引号 var x ='hello world'; // 单引号 var y = "hello world"; // 双引号 如果字符串中有引号,可以用单双交替的方式 var a = "He is called 'yoyo'"; // 外双内单 var b = 'He is called "yoyo"'; // 外单内双 如果一个字符串中同时有单引号和双引号,那么此
上海-悠悠
2022/05/20
5880
JavaScript 学习-11.字符串 String 对象
JavaScript基础05--JS字符串
当使用 === 运算符时,相等字符串是不相等的,因为 === 运算符需要类型和值同时相等。
软件架构师Michael
2022/07/27
3250
JavaScript之JS的数据类型
JavaScript一共有6中数据类型: 基本数据类型(5):字符串(String)、数字(Number)、布尔(Boolean)、数组(Array)、空(Null)、未定义(Undefined) 复杂数据类型(1):对象(Object) 注意:Array、Date、Math、Error Set(ES6).....都是属于Object中
用户1195962
2018/09/13
1.5K0
JavaScript之JS的数据类型
JavaScript系列之JS数据类型,6大基本数据类型
点击上方蓝字“ITester软件测试小栈“关注我,每周一、三、五早上 09:00准时推送,每月不定期赠送技术书籍。
可可的测试小栈
2022/11/11
2.1K0
JavaScript系列之JS数据类型,6大基本数据类型
JavaScript——数据类型
在计算机中,不同的数据所需占用的存储空间是不同的,为了便于把数据分成所需内存大小不同的数据,充分利用存储空间,于是定义了不同的数据类型。
岳泽以
2022/10/26
9310
JavaScript——数据类型
JavaScript的概念,引入,基本数据类型
JavaScript(下文我们会用简称JS来代替)是脚本编程语言,JS语言开发的文件是以.js为后缀,通过在html文件中引入该js文件来控制html代码的交互功能以及前台数据处理的业务逻辑(js语言代码也可以直接写在html文件中),采用的ECMAScript语法,属于编程语言。
小小咸鱼YwY
2019/09/11
9290
前端学习(25)~js学习(三):变量的数据类型
在计算机中,不同的数据所需占用的存储空间不同,为了充分利用存储空间,于是定义了不同的数据类型。而且,不同的数据类型,寓意也不同。
Vincent-yuan
2020/03/18
1.4K0
javascript数据类型详解
JavaScript 是一种弱类型或者说动态语言。不用提前声明变量的类型,在程序运行过程中,类型会被自动确定。
timerring
2023/10/13
2720
javascript数据类型详解
【ES6基础】模板字符串(Template String)
模板字符串是ES6中非常重要的一个新特性,这个特性使得我们处理相关业务变得更加容易。比如在处理嵌入表达式、多行字符串、字符串中插入变量、字符串格式化等方面的应用。模板字符串使用反钩号(backticks,`),而不是单引号或双引号。以下是个简单的示例:
前端达人
2019/05/06
5780
【ES6基础】模板字符串(Template String)
JavaScript基础之六——内置对象 原
    JavaScript中的一些数据都是对象,对象实际上是属性与方法的包装。并不像其他类似Swift/OC/Java类的面向对象语言,在目前JavaScript的实现中并没有类的概念,开发者有如下两种方式来进行对象的构造:
珲少
2018/08/15
9000
C1 能力认证——JS基础
C1 能力认证——JS基础 JavaScript变量命名规则 在JavaScript中以下,以下哪些变量名是非法的(会导致程序报错)? 1person name var $orderwera23 uiuiuqwer4_23aser2 1person var # 不能以数字开头,和关键字命名 在JavaScript中,以下哪些变量名不建议使用? 1person name var $orderwera23 uiuiuqwer4_23aser2 iperson var $orderw
HammerZe
2022/03/24
1.6K0
C1 能力认证——JS基础
JS中一定要了解的数据类型和数据转换
**4. 单引号和双引号可以互相嵌套,如果单引号中药嵌套单引号,需要将单引号转义,同理,双引号相同**
汤清丽
2019/11/24
1K0
JavaScript数据类型
使用表单、prompt 获取过来的数据默认是字符串类型的,此时就不能直接简单的进行加法运算,而需要转换变量的数据类型。通俗来说,就是把一种数据类型的变量转换成另一种数据类型,通常会实现3种方式的转换:
星辰_大海
2020/09/30
9630
数组、字符串方法大全
delete:删除键值对的方式也可以删除数组中的对应项,不会改变数组中原有项的索引
星辰大海c
2023/11/20
2660
数组、字符串方法大全
JavaScript常见注意点(一)
在JavaScript中,数值型中不分整数和浮点数,所有数字都是数值型 在JavaScript中,NaN是一个全局对象的属性,它的初始值就是NaN,与数值型(Number)中的特殊值NaN一样,都表示非数字(Not a Number),可用于表示某个数据是否属于数值型,但是它没有一个确切的值,仅仅表示非数值型的一个方位。例如,NaN与NaN进行比较时,结果不一定为真(true),这是由于被操作的数据可能是布尔型、字符型、空型、未定义型和对象型中的任意一种类型。 单引号中使用单引号,或在双引号中使用双引号,则
兮动人
2021/06/11
6820
js字符串/数组常用方法总结
str.charAt(index); 从一个字符串中获取索引为index的字符。
Daotin
2020/09/06
3.4K0
相关推荐
❤万字长文JS全网最细笔记①(全网最强,建议收藏)❤
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验