JavaScript:如何验证字符串实际上是一个字符串

时间:2019-03-14 20:55:58

标签: javascript string validation

我正在创建一个框架,在该框架中,开发人员可以使用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提示是相同的,在所有情况下我都会得到字符串,但是实际情况有所不同,所以我能完全确定我是否可以将任何值转换为字符串?

2 个答案:

答案 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'