基本数据类型
JavaScript有几种不同的基本数据类型
- 布尔(Booleans)
- 字符串(Strings)
- 数字(Numbers)
- 空(Null)
- 未定义(Undefined,相当于Flow类型中的void)
- 符号(Symbols, Flow暂未支持)
基本数据类型以字面量的形式出现:
true;
"hello";
3.14;
null;
undefined;
或者使用构造函数显示创建包装对象:
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);
包装对象的类型是大写的(和它们的构造函数相同),在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也可以隐式地将其他类型的值转换为布尔值。
if (42) {} // 42 => true
if ("") {} // "" => false
当非布尔值需要被显式转换成布尔值。可以用Boolean(x)
或者!!x
来做到这一点。
// @flow
function acceptsBoolean(value: boolean) {
// ...
}
acceptsBoolean(0); // Error!
acceptsBoolean(Boolean(0)); // Works!
acceptsBoolean(!!0); // Works!
boolean
和Boolean
是不同的类型
- 布尔值(boolean)是一个字面量值,比如真值、假值或者像表达式
a === b
所返回的结果。 - Boolean 是由全局构造函数
new Boolean(x)
创建的一个包装对象。
数字(Numbers)
与许多其他语言不同,JavaScript只有一种类型的数字。这些值可能显示为42或3.14。JavaScript也认为无限(Infinity)和NaN是数字。number
捕获一切JavaScript所认为的数字。
// @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中通过连接将其他类型的值隐式将其转换为字符串。
"foo" + 42; // "foo42"
"foo" + {}; // "foo[object Object]"
然而,当执行连接操作时,Flow只接收字符串和数字类型
// @flow
"foo" + "foo"; // Works!
"foo" + 42; // Works!
"foo" + {}; // Error!
"foo" + []; // Error!
你必须使用String方法显式转换或使用其他方法来对值进行字符串化。
// @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!