[英]Need help understanding how these TypeScript declarations are different
试图了解这些声明之间的区别:
let foo = new String('bar'); // StringConstructor
let foo = new Number(100); // NumberConstructor
let foo: String = 'bar'; // interface
let foo: Number = 100; // interface
var foo: string = 'bar'; // globally scoped?
var foo: number = 100; // globally scoped?
使用不同的声明而不是其他声明有什么特别的优点和缺点吗?
JavaScript 的原始字符串是不可变的,这是传递 object(使用new
创建)与传递原始字符串( myVar = 'my-value';
)之间的巨大差异。
例如,尝试类似:
var myObject = new String('my value');
var myPrimitive = 'my value';
function myFunc(x) {
x.mutation = 'my other value';
}
myFunc(myObject);
myFunc(myPrimitive);
console.log('myObject.mutation:', myObject.mutation);
console.log('myPrimitive.mutation:', myPrimitive.mutation);
output应该是哪个:
myObject.mutation: my other value
myPrimitive.mutation: undefined
请注意,这同样适用于
Number
。
let/var 与 Typescript 无关,它们与 Javascript 相关:
通过调用“new String()”创建的字符串类型为 object,您应该避免使用它。
在第二种和第三种情况下,“String”是 Javascript object 用于创建字符串,“string”是 typescript 类型,应该用于键入字符串变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.