JavaScript: как проверить строку действительно строка - PullRequest
0 голосов
/ 14 марта 2019

Я создаю среду, в которой я даю разработчикам возможность создавать объекты с пользовательскими типами, используя определенные структуры метаданных в XML:

<class name="Class">
    <attr name="id" type="Yuid" mandatory="true"/>
    <attr name="name"type="YString"/>
</class>

тогда в javascript / typcript вы можете сделать что-то вроде:

 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 ]

1 голос
/ 15 марта 2019

Вместо использования:

const thang = new String("thang");

используйте:

const thang = "thang";
0 голосов
/ 15 марта 2019

В дополнение к проверке typeof вы можете проверить имя конструктора объекта

> var x = new String('hello')
> x
[String: 'hello']
> typeof x
'object'
> x.constructor.name
'String'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...