基本數(shù)據(jù)類型
JavaScript有幾種不同的基本數(shù)據(jù)類型
- 布爾(Booleans)
- 字符串(Strings)
- 數(shù)字(Numbers)
- 空(Null)
- 未定義(Undefined蓉坎,相當于Flow類型中的void)
- 符號(Symbols, Flow暫未支持)
基本數(shù)據(jù)類型以字面量的形式出現(xiàn):
true;
"hello";
3.14;
null;
undefined;
或者使用構(gòu)造函數(shù)顯示創(chuàng)建包裝對象:
new Boolean(false);
new String("world");
new Number(42);
Symbol("foo");
字面量的類型是小寫的猬错,在flow
中的用法如下:
// @flow
function method(x: number, y: string, z: boolean) {
// ...
}
method(3.14, "hello", true);
包裝對象的類型是大寫的(和它們的構(gòu)造函數(shù)相同),在flow
中的用法如下(一般不會這樣使用):
// @flow
function method(x: Number, y: String, z: Boolean) {
// ...
}
method(new Number(42), new String("world"), new Boolean(false));
布爾(Booleans)
布爾值是JavaScript中的真值和假值剖煌。 Flow中的布爾類型接收這些值。
// @flow
function acceptsBoolean(value: boolean) {
// ...
}
acceptsBoolean(true); // Works!
acceptsBoolean(false); // Works!
acceptsBoolean("foo"); // Error!
JavaScript也可以隱式地將其他類型的值轉(zhuǎn)換為布爾值崩泡。
if (42) {} // 42 => true
if ("") {} // "" => false
當非布爾值需要被顯式轉(zhuǎn)換成布爾值。可以用Boolean(x)
或者!!x
來做到這一點衫画。
// @flow
function acceptsBoolean(value: boolean) {
// ...
}
acceptsBoolean(0); // Error!
acceptsBoolean(Boolean(0)); // Works!
acceptsBoolean(!!0); // Works!
boolean
和Boolean
是不同的類型
- 布爾值(boolean)是一個字面量值,比如真值瓮栗、假值或者像表達式
a === b
所返回的結(jié)果削罩。 - Boolean 是由全局構(gòu)造函數(shù)
new Boolean(x)
創(chuàng)建的一個包裝對象。
數(shù)字(Numbers)
與許多其他語言不同费奸,JavaScript只有一種類型的數(shù)字弥激。這些值可能顯示為42或3.14。JavaScript也認為無限(Infinity)和NaN是數(shù)字愿阐。number
捕獲一切JavaScript所認為的數(shù)字微服。
// @flow
function acceptsNumber(value: number) {
// ...
}
acceptsNumber(42); // Works!
acceptsNumber(3.14); // Works!
acceptsNumber(NaN); // Works!
acceptsNumber(Infinity); // Works!
acceptsNumber("foo"); // Error!
字符串(Strings)
JavaScript中字符串是指類似"foo"這樣的值。 Flow中的字符串類型接收這些值缨历。
// @flow
function acceptsString(value: string) {
// ...
}
acceptsString("foo"); // Works!
acceptsString(false); // Error!
JavaScript中通過連接將其他類型的值隱式將其轉(zhuǎn)換為字符串以蕴。
"foo" + 42; // "foo42"
"foo" + {}; // "foo[object Object]"
然而,當執(zhí)行連接操作時辛孵,F(xiàn)low只接收字符串和數(shù)字類型
// @flow
"foo" + "foo"; // Works!
"foo" + 42; // Works!
"foo" + {}; // Error!
"foo" + []; // Error!
你必須使用String方法顯式轉(zhuǎn)換或使用其他方法來對值進行字符串化丛肮。
// @flow
"foo" + String({}); // Works!
"foo" + [].toString(); // Works!
"" + JSON.stringify({}) // Works!
空值(null and void)
JavaScript有null
和undefined
。Flow將它們視為單獨的類型:null
和void
(undefined
)魄缚。
// @flow
function acceptsNull(value: null) {
/* ... */
}
function acceptsUndefined(value: void) {
/* ... */
}
acceptsNull(null); // Works!
acceptsNull(undefined); // Error!
acceptsUndefined(null); // Error!
acceptsUndefined(undefined); // Works!