在JS中,为什么要用!!来得到一个bool型变量

在看大侠们写的JS code中一直会发现有!!(condation)中,一向以来比较迷惑,不知道为什么这样写。因为双非(!!)之后,和以前所得到的值并没有区别,那我们为什么要多些一举,做这件事情呢?

谈到这个问题,我们首先应该从根上说起,因为JS是一门弱类型语言,所以在一些情况下,我们得到的值并不一定是boolean值,虽然在大数情况下,这是正确的,但是如果我们在一些严格的场景下我们有可能会得到错误的结果,如下例:

var isFoo=function(){

  return true&&"result";

}

console.log(isFoo());// 结果将是"result"

typeof isFoo()=="string";//不是我们期待的"boolean "

if(isFoo()){

  //code is here will be executed.

}

因为在JS中,解析器会把除false, 0, null, undefind,NaN以外的值都当成true,所以在当一些严格的场景中,需要使用!!来取得真正的bool值。 

最后让我们来看一下&&运算符是如何返回值的:&&将会返回第二个比较结果,在第一个结果是真的情况下,让我们来看下例:

True&&"foo";//"foo"

NaN&& "anything";  //NaN

0&&"anything";// 0

转载于:https://www.cnblogs.com/moonreplace/archive/2012/08/09/2629916.html

好的,下面是nestjs node-snap7读写bool数组与单个bool变量的相关信息: 首先,要使用node-snap7,需要在nestjs项目安装node-snap7的依赖。可以在项目根目录下运行以下命令: ``` npm install node-snap7 --save ``` 接着,在nestjs调用node-snap7的API读写bool数组和单个bool变量。以下是示例代码: ```typescript import { Controller, Get } from '@nestjs/common'; import * as snap7 from 'node-snap7'; @Controller() export class AppController { private plc = new snap7.S7Client(); constructor() { this.plc.connect('192.168.1.10', 0, 1, (err) => { if (err) { console.error('Failed to connect to PLC:', err); } else { console.log('Connected to PLC.'); } }); } @Get('readBool') async readBool() { const buffer = Buffer.alloc(1); const result = await this.plc.readArea(snap7.S7AreaDB, 1, 0, 1, snap7.S7Byte, buffer); const value = snap7.utils.getBitAt(buffer, 0, 0); return { value }; } @Get('readBoolArray') async readBoolArray() { const buffer = Buffer.alloc(10); const result = await this.plc.readArea(snap7.S7AreaDB, 1, 0, 10, snap7.S7Byte, buffer); const values = Array.from({ length: 80 }, (_, i) => snap7.utils.getBitAt(buffer, i % 8, Math.floor(i / 8))); return { values }; } @Get('writeBool') async writeBool(value: boolean) { const buffer = Buffer.alloc(1); snap7.utils.setBitAt(buffer, 0, 0, value); const result = await this.plc.writeArea(snap7.S7AreaDB, 1, 0, snap7.S7Byte, buffer); return { result }; } @Get('writeBoolArray') async writeBoolArray(values: boolean[]) { const buffer = Buffer.alloc(10); values.forEach((value, i) => snap7.utils.setBitAt(buffer, i % 8, Math.floor(i / 8), value)); const result = await this.plc.writeArea(snap7.S7AreaDB, 1, 0, snap7.S7Byte, buffer); return { result }; } } ``` 其,readBool()方法用于读取单个bool变量,readBoolArray()方法用于读取bool数组,writeBool()方法用于写入单个bool变量,writeBoolArray()方法用于写入bool数组。这些方法,都是通过调用node-snap7的API实现读写操作的。 请注意,在使用node-snap7进行读写操作时,需要先连接到PLC。在上述示例代码,我在构造函数连接到了PLC,这样就可以在接下来的方法直接使用this.plc进行读写操作。如果您的PLC连接参数不同,需要根据实际情况进行修改。 希望这些信息对您有所帮助。如果您还有其他问题,请随时提出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值