在HarmonyOS NEXT开发中如何打印某一对象的具体类型?

在HarmonyOS NEXT开发中如何打印某一对象的具体类型?如下所示,除明确的string/number/undefined以外,其他均为Object??或者有其他的关键字可以打印?

let a = ‘’; 
let b = null; 
let c = undefined; 
let d = 4; 
// let e = {}; 
let f = []; 
console.log(a, typeof(a)); // string 
console.log(b, typeof(b)); // null object 
console.log(c, typeof©); // undefined undefined 
console.log(’’, d, typeof(d)); // 4 number 
console.log(’’, f, typeof(f)); // object 
// 理想中,应该为Array 
 
let g: User = new User(); 
console.log(’’, typeof(g)); // object 
// 理想中,应该显示为 xx.User对象 
 
class User { 
  id: number = 0 
 
  name: string = ‘’ 
}
阅读 1k
avatarAI BotBETA
在HarmonyOS NEXT(以及大多数JavaScript和TypeScript环境)中,`typeof` 操作符用于获取一个变量的类型,但它有一些限制,特别是对于对象和数组,它们都会返回 `"object"`。为了更具体地打印对象的类型(例如,区分数组和普通的对象,或者获取自定义类的类名),你可以使用其他方法。

对于数组,你可以使用 `Array.isArray()` 方法来检查一个变量是否是数组。对于自定义类实例,你可以使用 `instanceof` 操作符或者对象的 `constructor.name` 属性来获取更具体的类型信息。

下面是如何在你的例子中实现这些功能的示例代码:

let a = '';
let b = null;
let c = undefined;
let d = 4;
let f = [];
console.log(a, typeof a); // string
console.log(b, typeof b); // object (null is considered a subtype of object in typeof)
console.log(c, typeof c); // undefined
console.log(d, typeof d); // number
console.log(f, Array.isArray(f) ? 'Array' : typeof f); // Array

class User {
id: number = 0;
name: string = '';
}

let g: User = new User();
console.log(g, g instanceof User ? 'User' : typeof g); // User object (second part is for typeof g which is still 'object')
console.log(g.constructor.name); // User (gets the class name)


注意,`g instanceof User` 会检查 `g` 是否是 `User` 类的一个实例,并返回布尔值。结合三元运算符,你可以打印出更具体的类型信息。而 `g.constructor.name` 则直接获取了构造函数的名称,这在大多数情况下会给出类的名字。

对于 `null` 和 `undefined`,`typeof` 已经提供了足够的信息,虽然 `typeof null` 返回 `"object"` 是一个历史遗留问题,通常你需要在代码中特别处理这种情况。
1 个回答

可以通过Object.getPrototypeOf(a).constructor.name 获取对象类型。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
HarmonyOS
子站问答
访问
宣传栏