javascript中的String

javascript中的String

本文主要讲解js中string这个基本类型的使用和剖析,有不当之处可以指出,仅限于个人理解,不喜请喷,哈哈。。

string的基本概念


string就是一个字符串,但是官方解释呢,String类型用于表示由零个或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由双引号和单引号表示,但是不能混用,如下面的代码:

var str1 = 'hello';
var str2 = "hello";
var str3 = 'hello";

如上,前两行代码是有效的,第三行代码是错误的,开头和结尾的引号必须是一样的,匹配才行。而且,在ECMAScript当中的这两种语法没有任何区别,是完全一样的。

任何string都有一个属性是length,都可以通过他的这个属性获取到字符串的长度。例如:

var str = 'hello world';
console.log(str.length);

上面这块代码将打印出str的长度,长度为11;

字符串的声明

其实很简单,上面的代码中,咱们已经看到了一个字符串是如何声明的,但是,字符串的声明有三种格式:

var str1 = 'hello world';
var str2 = new String('hello world');
var str3 = String('hello wolrd');

上面的代码,都是声明了一个hello world的字符串,但是是有区别的,我们运行看了下:

typeof str1;
typeof str2;
typeof str3;

上面代码分别打印出来的是string,object,string,也就是说,咱们第二种方式声明的字符串是一个对象。既然是对象,那么我们就可以给这个对象添加方法和属性。
同时,咱们打印了下上面三个变量的值,不出所料,str1和str3打印出来的是一样的,但是str2打印出来的是不一样的,看下面:

console.log(str1);
console.log(str2);
console.log(str3);
hello world
String {0: "h", 1: "e", 2: "l", 3: "l", 4: "o", 5: " ", 6: "w", 7: "o", 8: "r", 9: "l", 10: "d", name: 123, length: 11, [[PrimitiveValue]]: "hello world"}
hello wolrd

ok ,上面就是代码和运行结果,咱们看到了,str2确实不一样。

好了,现在,咱们可以看下下面这块代码的输出是什么:

var s1 = 'jack';
s1.name = 'jack wen';
console.log(s1.name);
var s2 = new String('linda');
s2.name = 'linda han ';
console.log(s2.name);

其实咱们输出的结果应该已经猜到了,但是为什么是这样的结果呢,就是因为s2是一个对象,可以给其添加属性。
咱们剖析下s1的运行过程吧,首先咱们声明了s1,那么在运行时是怎么执行的呢???
咱们知道,所有的字符串都是String的一个实例,但是javascript中string是一个基本类型,所以,咱们在运行的时候应该是这样的:(重点内容)首先,s1=new String(‘jack’);然后立即销毁这个对象,只是把这块内存指向了s1,所以咱们拿到的s1是一个普通类型的,不是一个引用类型,即不是对象,咱们就不可以给其添加属性了;
但是s2是不一样的,咱们就是创建了一个实例,new出来的,所以咱们拿到的是一个引用,可以添加属性,所以,就导致了这种现象。至于s3,自己想去吧,哈哈。。。

toString

这是一个方法,为什么要放到这来讲呢,因为这是一个转化为string的一个函数,哈哈,js中所有的对象,变量都有这个方法,支持重写,但是也有不同,咱们看下:

var num = 10;
console.log(num.toString());
var str = 'jackwen';
console.log(str.toString());

看下输出:

10
jackwen

没有问题,一直以来,咱们就是这么干的,不同之处在哪呢,在num:

var num = 10;
console.log(num.toString());
console.log(num.toString(2));
console.log(num.toString(8));
console.log(num.toString(16));

现在咱们的输出是这样的:

10
1010
12
a

没错,默认是十进制的,但是支持传参数,可以转化为任意进制的值。这就是不同,有木有很简单。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值