JavaScript字符串很容易被认为本质就是字符数组,ECMAScript规范中字符串作为一种单独的string类型,它的底层实现可能是数组,也可能是其他数据结构,因不同的JavaScript引擎而异。就像c++语言一样,c++最新标准为国际化标准组织与2011年发布,不同的编译器(例如cl、gcc、g++等)对这套标准的实现都有所不同,甚至有些编译器还增加了一些个性化的元素。目前主流的JS引擎有SpiderMonkey(Mozilla浏览器使用的引擎)、V8引擎(Chrome浏览器引擎)等,这些引擎都是开源的,不仅仅可以用在浏览器中,一些商业游戏引擎(如Unity3d)中也有应用。

对于使用JS语言编写应用的程序员来说,我们属于用户,并不需要过多关注JS引擎是如何实现ECMAScript规范的。

正确认识JS字符串并不是字符数组是相当重要的,我们来看一下二者的异同点:

    <script type="text/javascript">
var str = "hello";
var arr = ['h','e','l','l','o'];
alert(str.length);//5
alert(arr.length);//5
alert(str.indexOf('e'));//1
alert(arr.indexOf('e'));//1
str.concat("world");
arr.concat(['w','o','r','l','d']);
alert(str[0]);//h
alert(arr[0]);//h
</script>

字符串和字符数组都有length属性,我们可以使用它来获取字符串(字符数组)的长度。都提供indexOf函数,该函数可以返回某个字符在字符串(字符数组)中的位置。都可以调用concat和其他字符串(字符数组)进行拼接,都可以使用下标形式获取字符串(字符数组)中的某一个字符。

接下来介绍两者不同的地方,

JavaScript字符串长度是不可变的,而字符数组的长度可以任意改变。

str.concat("world");
str += "world"

调用concat函数实际上产生了一个新的字符串,str的内容依然没变。使用+=运算符看上去好像str的长度发生改变,事实上也是产生了一个新的字符串复制给str变量。

    <script type="text/javascript">
var str = "hello";
var arr = ['h','e','l','l','o'];
alert(typeof str);//string
alert(typeof arr);//object
//str.reverse();//error: reverse is undefined
arr.reverse();//right
str += "world";
arr += ['w','o','r','l','d'];
alert(str);//helloworld
alert(arr);//h,e,l,l,ow,o,r,l,d var str1 = "1234";
var arr1 = ['1','2','3','4'];
alert(+str1);//1234
alert(+arr1);//NaN
</script>

JS字符串属于string类型,数组属于object类型,我们可以调用数组的reverse函数对字符进行反转,但这个方法在string中未定义。使用+=运算符对字符串和字符数组进行拼接时二者的差异也较大,具体情况请参考上面的代码。我们可以使用单目运算符正号’+’將字符串隐式转换成数字,但是字符数组不行,结果为NaN。

上面为二者的异同点,最后介绍一下將字符串转换成数字的其他方法。

    <script type="text/javascript">
var str = "1234";
alert(typeof (str - 0));//alert number
alert(typeof parseInt(str));//alert number
</script>

除了上面的正号运算符’+’,我们还可以把字符串和数字0做减法运算或者调用parseInt函数將字符串转换成数字。

你不知道的JavaScript(三)字符串的更多相关文章

  1. 【读书笔记】-- 你不知道的JavaScript

    <你不知道的JavaScript>是一个不错的JavaScript系列书,书名可能有些标题党的意思,但实符其名,很多地方会让你有耳目一新的感觉. 1.typeof null === &qu ...

  2. 读书笔记-你不知道的JavaScript(上)

    本文首发在我的个人博客:http://muyunyun.cn/ <你不知道的JavaScript>系列丛书给出了很多颠覆以往对JavaScript认知的点, 读完上卷,受益匪浅,于是对其精 ...

  3. 你不知道的javaScript上卷(第一章 作用域是什么)

    在写这篇博客时这本书我已经是看过一遍了,为了加深印象和深入学习于是打算做这系列的前端经典书籍导读博文,大家如果觉得这本书讲的好可以自己买来看看,我是比较喜欢看纸质版书的,因为这样才有读书的那种感觉. ...

  4. 你不知道的JavaScript之类型

    JavaScript是一门简单易用的语言,应用广泛,同时它的语言机制又十分复杂和微妙,即使经验丰富的开发人员也需要用心学习才能真正掌握. <你不知道的JavaScript>中是这样定义类型 ...

  5. 《你不知道的 JavaScript 上卷》 学习笔记

    第一部分: 作用域和闭包 一.作用域 1. 作用域:存储变量并且查找变量的规则 2. 源代码在执行之前(编译)会经历三个步骤: 分词/此法分析:将代码字符串分解成有意义的代码块(词法单元) 解析/语法 ...

  6. 《你不知道的javascript》读书笔记2

    概述 放假读完了<你不知道的javascript>上篇,学到了很多东西,记录下来,供以后开发时参考,相信对其他人也有用. 这篇笔记是这本书的下半部分,上半部分请见<你不知道的java ...

  7. 《你不知道的JavaScript》笔记(一)

    用了一个星期把<你不知道的JavaScript>看完了,但是留下了很多疑惑,于是又带着这些疑惑回头看JavaScript的内容,略有所获. 第二遍阅读这本书,希望自己能够有更为深刻的理解. ...

  8. 《你不知道的JavaScript》整理(二)——this

    最近在读一本进阶的JavaScript的书<你不知道的JavaScript(上卷)>,这次研究了一下“this”. 当一个函数被调用时,会创建一个活动记录(执行上下文). 这个记录会包含函 ...

  9. 《你不知道的JavaScript》整理(一)——作用域、提升与闭包

    最近在读一本进阶的JavaScript的书<你不知道的JavaScript(上卷)>,里面分析了很多基础性的概念. 可以更全面深入的理解JavaScript深层面的知识点. 一.函数作用域 ...

  10. 你不知道的Javascript(上卷)读书笔记之一 ---- 作用域

    你不知道的Javascript(上卷)这本书在我看来是一本还不错的书籍,这本书用比较简洁的语言来描述Js的那些"坑",在这里写一些博客记录一下笔记以便消化吸收. 1 编译原理 在此 ...

随机推荐

  1. 子线程中刷新了UI

    This application is modifying the autolayout engine from a background thread, which can lead to engi ...

  2. ROS-VIM

    在终端输入:vimtutor,进入学习教程. 常用快捷键: a 编辑模式; 编辑状态下 回车 换行; Ctrl+n 补全命令; x剪切; p复制; u撤销; :q!不保存退出; :wq保存并退出; 以 ...

  3. Oracle 复合索引设计原理——前缀性和可选性

    前缀性: 复合索引的前缀性是指只有当复合索引的第一个字段出现在SQL语句的谓词条件中时,该索引才会被用到.如复合索引为(ename,job,mgr),只要谓词条件中出现第一个字段ename,就可以用复 ...

  4. html 编码与解码

    var HtmlUtil = { /*1.用浏览器内部转换器实现html转码*/ htmlEncode:function (html){ //1.首先动态创建一个容器标签元素,如DIV var tem ...

  5. PHP-输入账号密码进入网页

    1. 2. 3. 4.(itcast.html步骤)随便一个本地网页代替即可

  6. ZBrush中Magnify膨胀笔刷介绍

    Magnify膨胀笔刷是ZBrush®笔刷中经常使用的,利用该笔刷可绘制中心向四周膨胀的效果.本文内容向大家介绍ZBrush®中膨胀笔刷以便大家熟悉它的用法和特性. Magnify膨胀笔刷 Magni ...

  7. criteria的projection做分页

  8. CF 949C Data Center Maintenance_强联通分量_思维题

    题意: 某土豪公司建立了n个数据中心,把m份资料每份在其中的两个数据中心备份. 每个数据中心在一天h个小时当中有一个小时需要维护,此时不提供资料下载服务. 现在土豪公司想要将其中若干个数据中心的维护时 ...

  9. jq——动画

    基本 1 show(可加时间)显示[在效果完成后可执行函数] 2 hide(可加时间)隐藏 3 toggle():切换效果 [在show和hide中切换] 有函数时 滑动动画 1 slideDown: ...

  10. Java web课程学习之JSP

    JSP     jsp隐式对象:JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明.JSP隐式对象也被称为预定义变量. jsp脚本片段 l jsp脚本片段是指 ...