我正在创建一个框架,在该框架中,开发人员可以使用XML中定义的元数据结构来创建具有自定义类型的对象:
<class name="Class">
<attr name="id" type="Yuid" mandatory="true"/>
<attr name="name"type="YString"/>
</class>
然后在javascript / typescript中,您可以执行以下操作:
const instance = new Class({
name: "bob"
});
想法是将验证器添加到类属性生成器中,以断言XML模式有效。
对于简单的基元,我一直使用str = new String(str)
之类的基元构造函数,直到我们在显示此数据时开始遇到一些奇怪的问题。为了说明:
const thang = new String("thang");
const theng = String("theng");
const thing = "thing";
const thong = String({ rick: "sanchez" });
const thung = new String({ rick: "sanchez" });
console.log(thang, typeof thang); // [String: 'thang'] 'object
console.log(theng, typeof theng); // theng string
console.log(thing, typeof thing); // thing string
console.log(thong, typeof thong); // [object Object] string
console.log(thung, typeof thung); // [String: '[object Object]'] 'object'
console.log({}.toString(), typeof {}.toString()); // [object Object] string
console.log("abc".toString(), typeof "abc".toString()); // abc string
console.log([1, 2, 3].toString(), typeof [1, 2, 3].toString()); // 1,2,3 string
console.log((5).toString(), typeof (5).toString()); // 5 string
console.log(`thang is ${thang}`); // thang is thang
console.log(`theng is ${thang}`); // theng is theng
console.log(`thing is ${thang}`); // thing is thing
console.log(`thong is ${thong}`); // thong is [object Object]
console.log(`thung is ${thung}`); // thung is [object Object]
TypeScript提示是相同的,在所有情况下我都会得到字符串,但是实际情况有所不同,所以我能完全确定我是否可以将任何值转换为字符串?
答案 0 :(得分:1)
代替使用:
const thang = new String("thang");
使用:
const thang = "thang";
答案 1 :(得分:0)
除了typeof检查外,您还可以检查对象的构造函数名称
> var x = new String('hello')
> x
[String: 'hello']
> typeof x
'object'
> x.constructor.name
'String'