首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串类型和字符串类型有什么不同?

字符串类型和字符串类型有什么不同?
EN

Stack Overflow用户
提问于 2013-02-06 18:43:00
回答 7查看 142.4K关注 0票数 373

有人知道TypeScript中Stringstring的区别吗?我假设它们应该是相同的,对吗?

代码语言:javascript
复制
var a: String = "test";
var b: string = "another test";
a = b;
b = a; // this gives a compiler error!

编译器的当前版本如下所示:

代码语言:javascript
复制
Type 'String' is not assignable to type 'string'.
  'string' is a primitive, but 'String' is a wrapper object.
     Prefer using 'string' when possible.

那是个bug吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-02-06 19:04:07

下面是一个显示差异的示例,这将有助于解释。

代码语言:javascript
复制
var s1 = new String("Avoid newing things where possible");
var s2 = "A string, in TypeScript of type 'string'";
var s3: string;

String是JavaScript字符串类型,您可以使用它来创建新字符串。没有人这样做,因为在JavaScript中,文字被认为是更好的,所以上面示例中的s2在没有使用new关键字和没有显式使用String对象的情况下创建了一个新的字符串。

string是TypeScript字符串类型,可以用来输入变量、参数和返回值。

其他备注...

目前(2013年2月) s1s2都是有效的JavaScript。s3是有效的TypeScript。

String的使用。你可能永远不需要使用它,字符串字面量被普遍认为是初始化字符串的正确方法。在JavaScript中,使用对象字面量和数组字面量也会更好:

代码语言:javascript
复制
var arr = []; // not var arr = new Array();
var obj = {}; // not var obj = new Object();

如果你真的喜欢这个字符串,你可以通过以下两种方式之一在TypeScript中使用它……

代码语言:javascript
复制
var str: String = new String("Hello world"); // Uses the JavaScript String object
var str: string = String("Hello World"); // Uses the TypeScript string type
票数 350
EN

Stack Overflow用户

发布于 2016-01-25 21:19:17

这两种类型在JavaScript中是不同的,TypeScript - TypeScript只是给我们提供了语法来注释和检查类型。

String是指原型链中包含String.prototype的对象实例。您可以通过多种方式获取此类实例,例如new String('foo')Object('foo')。您可以使用instanceof运算符测试String类型的实例,例如myString instanceof String

stringstring的基本类型之一,JavaScript值主要是使用文字(例如'foo'"bar" )以及各种函数和运算符的结果类型创建的。您可以使用typeof myString === 'string'测试string类型。

在大多数情况下,string是您应该使用的类型--几乎所有接受或返回字符串的API接口都会使用它。当将所有JS原语类型用作对象时(例如访问属性或调用方法),它们都将与其相应的对象类型一起包装(boxed)。由于String目前在TypeScript's core library中被声明为接口而不是类,因此结构化类型意味着string被视为String的一个子类型,这就是为什么您的第一行通过编译类型检查的原因。

票数 73
EN

Stack Overflow用户

发布于 2019-07-19 20:33:59

在JavaScript中,字符串可以是字符串原语类型,也可以是字符串对象。下面的代码显示了其中的区别:

代码语言:javascript
复制
var a: string = 'test'; // string literal
var b: String = new String('another test'); // string wrapper object

console.log(typeof a); // string
console.log(typeof b); // object

你的错误:

类型“string”不能赋值给类型“string”。“String”是一个基元,但“String”是一个包装对象。在可能的情况下,更喜欢使用'string‘。

因为您试图将类型string分配给string对象类型(通过new关键字创建),所以TS编译器会抛出。编译器告诉您,应该只将类型string用于字符串基本类型,并且不能使用该类型来描述字符串对象类型。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14727044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档