Flow基本数据类型(Primitive Types)

基本数据类型

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!

booleanBoolean是不同的类型

  • 布尔值(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有nullundefined。Flow将它们视为单独的类型:nullvoidundefined)。

// @flow
function acceptsNull(value: null) {
  /* ... */
}

function acceptsUndefined(value: void) {
  /* ... */
}

acceptsNull(null);      // Works!
acceptsNull(undefined); // Error!
acceptsUndefined(null);      // Error!
acceptsUndefined(undefined); // Works!

你可能感兴趣的:(Flow基本数据类型(Primitive Types))