js中数字是非布尔值吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js中数字是非布尔值吗相关的知识,希望对你有一定的参考价值。

数字0等价于布尔值false,其他任何非零数字都等价于布尔值true
布尔值本身就是个整数值,当然不同的程序设计语言有不同的表示方式,比如在VB中,布尔值是一个两字节的有符号整数,其中0代表false,-1代表true;而在所有类C语言(包括js)中,布尔值是个一字节的无符号整数,其中0代表false,1代表true
参考技术A

首先js中的数字不是布尔值. 

数字类型在js中就一种即number. 

布尔类型只有true 和false这两个值, 对应的类型为boolean.

你可以对数字这种简单类型(或者称为基本类型)的变量使用typeof得的准确的类型. 

typeof 1; // return "number"
typeof true; // return "boolean"

但是, js是一种动态语言, 通常一个变量的类型是可以不断改变的, 不同类型之间可以相互转换, 可以简单的这么理解, 0相当于false, 1相当于true. 

var a = 0, b = 1;
var x = false, y = true;
var a1 = Number(x); // a1 = 0; 将boolean类型转换为number
var b1 = Number(y); // b1 = 1; 将boolean类型转换为number
var x1 = Boolean(a); // x1 = false; 将number类型转换为boolean
var y1 = Boolean(b); // y1 = true; 将number类型转换为boolean

但是通常, 我们不太需要向上面那样进行类型转换, js会自动处理

var a = 10, b = true, c= false;
a + b; // 11
a*c; // 0

我们可以使用==来判断两个变量是否等价.

a == x; // return true
b == y; // return true

如果你用三个等号,即===来比较, 即执行严格比较:

1 === true; // rerurn false, 即说明1并不是true

因此, 虽然有些情况下, 数字可以当布尔值来使用, 但是在js中, 数字是数字, 布尔值是布尔值.

贝叶斯网络中的变量必须是布尔值吗?

【中文标题】贝叶斯网络中的变量必须是布尔值吗?【英文标题】:Do variables in Bayesian Networks have to be Boolean? 【发布时间】:2018-05-09 15:30:45 【问题描述】:

我不敢相信我找不到任何有关这方面的信息,但我在教科书或网上找到的每个示例都使用 T/F 变量,但是如何表示在贝叶斯网络中具有两个以上可能值的变量?

例如,我遇到了以下问题:

我们有一袋三枚有偏硬币的 a、b 和 c,正面朝上的概率分别为 20%、60%, 和 80%,分别。从袋子中随机抽取一枚硬币(抽取的可能性相同) 三个硬币中的每一个),然后将硬币翻转 3 次以产生结果 X1、X2 和 X3。

绘制与此设置对应的贝叶斯网络并定义必要的 CPT(条件 概率表)。

任何人都可以帮助我指明开始使用这个的方向吗?

【问题讨论】:

【参考方案1】:

贝叶斯网络支持具有两个以上可能值的变量。 Koller 和 Friedman 的“概率图形模型”中有较大变量域的示例。

通常 BN 具有离散随机变量(具有有限数量的不同值)。但也可以用可数无限或连续变量来定义它们。不过,在后一种情况下,推理算法发生了很大变化。

现在我尝试在网上找到一些例子,我不得不承认你是对的。他们很难找到。这是取自上述书籍的示例。变量Grade 可以取三个不同的值。

【讨论】:

这是一个很好的例子。【参考方案2】:

很好的问题。就具体的作业问题而言,有人已经为您指出了正确的方向,所以我不会重复;我会尝试添加一些可能有用的直觉。

您需要的直觉是贝叶斯网络只不过是一种表示一组条件独立假设的视觉(图形)方式。 因此,例如,如果 X 和 Z 是给定 Y 的条件自变量,那么您可以绘制贝叶斯网络 X → Y → Z。相反,唯一贝叶斯网络 X → Y → Z 告诉你存在三个变量(X、Y、Z)并且在给定 Y 的情况下 X 和 Z 是条件独立的。

一旦你理解了这一点,你就会意识到任何你可以写一个条件独立假设的东西,你都可以画一个贝叶斯网,反之亦然。 即,它们根本不需要是布尔值。

【讨论】:

我认为“贝叶斯网络”一词的定义并不总是正确的。有时包括 CPT,有时仅涉及独立关系。这是我在制作教材时遇到的问题之一。【参考方案3】:

通常贝叶斯网络是用每个节点的离散值建模的,当这些值已知(或值由建模器设置)时,人们会说概率分布分解这些值。

我认为具有连续值的贝叶斯网络的理论框架也存在,但它们在数学上比离散更难(可能只适合博士?)

此外,我无法解决您的问题,但也许 在 R 中试试这个:

library(dplyr)                # loads mutate(), %>% (pipe operator)

Model <- c("Coin a", "Coin b", "Coin c")
Prior <- c(0.2, 0.6, 0.8)
Likelihood <- c(1/3, 1/3, 1/3)

bayes_df <- data.frame(Model=Model, Prior=Prior, Likelihood=Likelihood) 

# posterior probabilities
bayes_df %>%
        mutate(Product = Likelihood * Prior, Posterior = Product/sum(Product)) 

结果

   Model Prior Likelihood Product Posterior
1 Coin a   0.2     0.3333 0.06667     0.125
2 Coin b   0.6     0.3333 0.20000     0.375
3 Coin c   0.8     0.3333 0.26667     0.500

我认为“网络”只是用箭头硬币连接的 2 个气泡 -> 选择,CPT 是上面的数字,但我不确定。

【讨论】:

以上是关于js中数字是非布尔值吗的主要内容,如果未能解决你的问题,请参考以下文章

编译器会优化模板布尔值吗?

我可以“反转”一个布尔值吗?

贝叶斯网络中的变量必须是布尔值吗?

“IsFalse”和“IsTrue”基本上只是隐式转换为布尔值吗?

js之数据类型(原始类型——数字,字符串,布尔值,空,undefiend,Symbol bigInt)

js字符串或则布尔值转换成数字类型的四种方法