浅谈Javascript中字符串方法的原因
众所周知,Javascript数据类型分为两大类:基本类型(或原始类型)和引用类型。
基本类型的值是存储在堆栈内存中的简单数据段,由值访问。在js中有五种基本类型:未定义的、空的、布尔的、数字的和字符串的。
对引用类型的值是一个对象存储在堆内存,其价值是通过参考。参考的主要类型是对象,数组,函数、正则表达式、日期。
对象是具有属性和方法的,所以我们看到下面的代码并不奇怪。
VaR的收藏= { 'egg、莲花};
Favs.push('okra);
console.log(收藏); / / 蛋 {
console.log(FAVS。长度); / / 3
数组是一种引用,所以它自然有属性(长度)和方法(推),这就像在夏天吃冰淇淋。这是合法的吗
VaR的真实消息=说我爱你;
VaR信息= realmessage.substring(5);
console.log(信息); / /我爱你
一个破碎的心的女纸故意执行子的方法到分手的字符串,然后高兴地观看剪辑过夜。但是,但是,是不是该字符串的基本类型,为什么它有办法吗天空主人没有正义啊!
事实上,这一切都是因为有东东基本包装类型。特殊包装的基本类型是直立的,深的地方真的付逸去!
基本包装类型
除了最初提到的对象和数组之类的引用类型,Javascript还为我们提供了三种特殊的引用类型:字符串、数字和布尔型,这有助于我们操作相应的基本类型。
继续查看上面的剪辑字符串示例。你有没有注意到,虽然是用子的方法,对真实消息本身的价值不会改变。调用此方法只返回一个新字符串。
这是基本的包装类型的功能,你没有办法去做,但是当你想使用的方法,你需要调整,相应的基本包装类型有这个方法,子串的方法例如,字符串的基本类型是不可能用这种方法,但这包装类型是字符串啊,它会把Chi Chi不执行该方法返回结果的执行:
realmessage.substring(5)
当这行代码完成时会发生很多事情。
首先,它读取记忆真实消息的价值。正是在这种阅读模式时,后台开始工作。JS抬高了,是在后台进行的动作:
1。创建字符串类型的实例;
2。指定的方法在实例上调用;
三.摧毁这个例子
上面的例子可以用这个代码来说明。
无功_realmessage =新的字符串(说我爱你);
VaR信息= _realmessage.substring(5);
_realmessgae = null; / /电话后的破坏
所以,我们看到,字符串的基本类型并不是方法本身实现的,而是后台创建的基本包类型A对应它,根据实例的基本值实例化出来,做例子来调用指定的方法,销毁它们的大木头。
注意,基本包类型的最后一步将破坏该特性,这决定了我们不能为基本类型值添加自定义属性和方法。
VAR我=孙敬文;
我,年龄= 18岁;
Console.log(我的年龄); / /未定义
我给我的字符串加了一个年龄属性值,设置为18岁,仍然漂亮,鸡蛋,再次访问,这个属性一直没有痕迹。这是因为:
在执行第二行代码属性赋值时,后台创建了基本打包类型的实例。年龄属性实际上挂在实例上,但是这个实例在被跟踪之后被销毁。当执行到第三行时,新的基本包装器类型的一个新实例被重新创建,自然没有年龄属性。
显示基本包装类型的使用
除了读取模式中的字符串,当背景帮助我们创建基本包装器类型的实例时,我们也可以自己创建它。
新字符串(hello);
VaR str2 = str.touppercase();
console.log(str2); / /你好:
这与我们在创建的时间变量中帮助我们保存的背景不同。
var str1 =新的字符串(你好);
VaR str2 =你好;
类型 / / str1对象
类型 / /字符串str2
总结
由于基本的包装方式,我们在操作字符串、布尔值、三种基本类型更方便一些。每一次的三个基本类型的值被读取,后台创建相应的包装类型的一个实例,调用指定的方法,和呼叫将被摧毁。这短暂的生命周期决定我们不能添加自定义属性和方法的基本类型。
让我们在子看()Javascript中的string类和切片法()方法
最近,我读了Javascript高级编程。我发现了一些我以前没见过的实用技能和知识。我想通过博客记录我的记忆。
在本书的2.8.4部分子字符串()方法和切片()在字符串类的方法和结果基本上是相同的,如下面的例子:
无功strobj =新的字符串(Hello World);
警报(strobj.slice(3)); / /输出:OL的世界
警报(strobj.substring(3)); / /输出:OL的世界
警报(strobj.slice(3, 7)); / /输出:LO W
警报(strobj.substring(3,7)); / /输出:LO W
从以上的结果代码的输出结果可以看到(片)法和substring()方法的调用和输出侧返回完全相同,这两种方法处理字符串的子串,接受一个或两个参数,第一个参数是获取字符串的第二个参数是获取子字符串的结束位置如果起始位置,结束位置的第二个参数省略默认为字符串的长度,并将这两种方法不改变它的值的字符串。
为什么有两个完全相同的函数事实上,这两种方法并不完全相同,但是只有当参数为负时,它们处理参数的方式才略有不同。
负参数,切片()方法添加参数为一个字符串的长度,和substring()方法使用它作为一个0的过程,例如:
无功strobj =新的字符串(Hello World);
警报(strobj.slice(- 3)); / /输出:RLD
警报(strobj.substring(- 3)); / /输出:世界你好
警报(strobj.slice(3,4)); / /输出:LO W
警报(strobj.substring(3,4)) / /输出:地狱
这可以让你看到两者的主要差异()和串片()方法,当参数3只,切片()返回世界这是因为,对于字符串Hello World以同样的方式,3和4之间差异明显。切片()方法将被转换为层(3,7),这是由于以前的例子一样,并返回到低。substring()方法解释两参数为字符串(0,3),这实际上是子串(0,3),因为substring()总是小参数为起始位,而较大的数字是最终止位。