diff --git a/docs/uts/operator.md b/docs/uts/operator.md index 5d143e5024991e4f9da3ebc1f170ff204a937c1d..06ab7ee86a23e7453f5594bd85a5c9cdcdf93221 100644 --- a/docs/uts/operator.md +++ b/docs/uts/operator.md @@ -344,9 +344,19 @@ a as string // 异常 使用 `instanceof` 运算符执行运行时检查,以标识对象是否符合给定类型。 +| 类型 | 结果 | +| ------------------------------------------------------------------------------------ | ---------------- | +| Boolean | 编译报错,不支持 | +| Number | 编译报错,不支持 | +| String | 编译报错,不支持 | +| 平台专有数字类型: Int, Float, Double, Long ... | true or false | +| typeof 结果为 "object" 的类型(包含但不限于:Date, Array, Map, UTSJSONObject, 自定义类型) | true or false | + +对于 Boolean, Number, String 类型的实例判断,请使用 `typeof` . + ```ts function fn(obj: any) { - if (obj instanceof String) { + if (obj instanceof Date) { // ... } } @@ -365,8 +375,8 @@ function fn(obj: any) { 已经可以明确判断类型兼容性时无需使用 `instanceof` 在运行时进行判断,编译阶段会检查出这种情况会报错或者警告: ```ts -function fn(obj: string) { - if (obj instanceof String) { +function fn(obj: Date) { + if (obj instanceof Date) { // ... } } @@ -376,17 +386,11 @@ function fn(obj: string) { ```ts -let a = 10.0 -let b: Double = 3.14 -let c: any = a -let d: any = b -let e: Int = 2 +let a: Double = 3.14 +let b: Int = 2 -a instanceof number // true -b instanceof Double //true -c instanceof number //true //kottlin 结果为 false -d instanceof Double // true -e instanceof Int //true +a instanceof Double //true +b instanceof Int //true ``` @@ -394,31 +398,31 @@ e instanceof Int //true ## 实例类型获取 -使用 `typeof` 运算符获取操作数的类型,返回一个表示类型的字符串, 默认值是 "object"。 +使用 `typeof` 运算符获取操作数的类型,返回一个表示类型的字符串。 + +| 类型 | 结果 | +| ------------------------------------------------------ | ---------------- | +| null | "object" | +| boolean | "boolean" | +| number | "number" | +| string | "string" | +| function | "function" | +| 平台专有数字类型: Int, Float, Double, Long ... | "Int","Float","Double","Long" ... | +| 其他任何对象(包含但不限于:Date, Array, Map, UTSJSONObject) | "object" | -对于数字类型,除了 number 之外,typeof 还能返回 Int Float Double Int64 Long ... 等所有平台特有数字类型。 -基本用法: +用法示例: ```ts // number let a = 10.0 let b: Double = 3.14 -let c: any = a -let d: any = b -let e: Int = 2 +let c: Int = 2 typeof a == "number" //true typeof b == "Double" //true -typeof d == "Double" //true -typeof e == "Int" //true - -// 在 Swift 中 -typeof c == "number" //true - -// 但是在 Kottlin 中, typeof c 结果是 Double -typeof c == "Double" +typeof c == "Int" //true // string let str = "hello uts" @@ -446,9 +450,30 @@ let obj = { typeof obj == "object" // true -// 除了上述类型外,typeof 默认返回的是 "object" - typeof null == "object" //true typeof [1, 2, 3] == "object" //true -``` \ No newline at end of file +``` + +使用 typeof 获取 any 实例的类型时,在安卓平台上存在一些特殊情况: + +```ts + +// number +let a = 10.0 +let b: Double = 3.14 +let c: any = a +let d: any = b + +typeof a == "number" //true +typeof b == "Double" //true +typeof d == "Double" //true + +// 在 iOS 平台上 +typeof c == "number" //true + +// 在安卓平台上期望返回 "number" 但真实返回的是 "Double" +typeof c == "number" //false 真实返回的是 "Double" + +``` +