接着昨天的文章,今天这篇文章主要讲述JS中剩余的两种数据类型String,和Object

String类型

对于该类型,书中给出的解释为:由0或多个16为Unicode字符组成的字符序列。

对于JS中的String类型首先要明确的是,在JS中单引号,和双引号是没有区别的,跟PHP及部分语言单双引号会影响对字符串的解释不同。

虽然单双引号没有什么不同,但是要保证引号的闭合,即你不能用单引号开头,双引号结尾。

这一特点在es6的模板字符串出来之前,能使我们对字符串的拼接简单许多。

比如,在JS中操作DOM节点的时候,一些标签属性的写法需要我们使用引号将其引用起来,那么这种时候我们就可以标签内部用单引号,外部用双引号来进行拼接

var str = "<a href='www.baidu.com'></a>"+"<a href='www.baidu.com'></a>"

在JS中,也有一些转译字符,即一些特殊的字符字面量,这些字符具有其它的用途

\n  换行

\t  制表

\b  退格

\r  回车

\f  进纸(一般出现在打印中)

\\  斜杠

\'  单引号

\"  双引号

\xnn  以十六进制代表的一个字符,\x41 A

\unnn  以十六进制代表的Unicode字符,\u03a3 ∑

上面的这些特殊字面量的使用场景是在需要在字符串中打印出一些特殊字符的时候。

关于字符串的长度,书上有这么一句话,如果字符串中包含双字节字符,那么length的长度可能不精确。

众所周知,中文是双字节字符,但不管我怎么测长度都是正确的。

联系着上文的String的定义,是由16位Unicode编码组成的,那么很显然String应该对Unicode编码中有的字符都能正确地计算字符串的长度。

所以我找了个Unicode编码中没有的字进行测试,就是四个龙叠在一起那个繁体字(zhe),返回的值为2

原因在于现在采用的Unicode码为16位,一共只能表示6万多个符号,而中文算上繁体字就有6,7万字所以16位的Unicode编码只收录了常用的6,7千字。

而那些装不下的繁体汉字用的是32位的unicode码,所以这里的长度返回为2

不过我们不用太过担心,因为这样的字符在浏览器中是无法显示的

拿刚才那个字来说,百度的title为:

可以看到是无法显示的

除了length之外字符串还有一个特点,那就是JS中的字符串是不可变的。

字符串一旦创建,那么这个字符串的值就不能改变。

而我们修改保存字符串的变量的值,实际上JS会销毁原本的字符串,然后以新值来填充变量。

这也是低版本浏览器字符串拼接速度很慢的原因。

字符串转换

把一个类型的值转换为一个字符串有两种方式

1.通过值的toString方法(只有null、undefined没有该方法),该方法可以传入基数,即以几进制输出字符串

2.通过字符串转换方法String()来进行转换,该方法转换规则如下

  • 对于有toString方法的值,调用该方法并返回结果(返回的值不能为object)
  • 如果值为null返回“null”
  • 如果值为undefined返回“undefined”
  • 对于toString()的返回值为Object的值,则调用该值的valueOf方法,若返回值仍为Object则报错

Object类型

这也就是我们常说的对象类型

关于该类型的声明,有两种方式一种是字面量的方式,另一种是通过构造函数的方式

var a = {};
var b = new Object();
var c = new Object;

如上图所示,不过最后一种不推荐使用,即使你并不需要为构造函数传入参数,因为在JS中带括号的构造函数的优先级会高一些。

如果你不带括号那么在代码执行的过程中很可能出现一些意料之外的错误。

Object类型是所有它的实例的基础,每个Object的实例都有以下的属性和方法:

  • constructor:保存着创建当前实例的构造函数
  • hasOwnProperty(属性名):该方法用于判断某一属性是否属于当前实例,而不是通过原型链继承而来(该方法的参数必须以字符串的形式指定)
  • isPrototypeOf(对象):判断传入的对象是否为当前实例的原型
  • propertyIsEnumerable(属性名):判断某一属性名是否可被枚举,即能否使用for-in循环将其遍历出来
  • toLocalString():返回对象的字符串表示,与执行环境的地区相对应
  • toString():返回对象的字符串表示
  • valueOf():通常与toString的方法的返回值相同

需要注意的是并非所有对象都继承自Object,因为BOM对象和DOM对象是由浏览器实现的,浏览器厂商不一定会让其继承自Object

而有关Object的类型转换:

  1. 转为Boolean 所有对象全为true
  2. 转为String 使用String()进行转换,具体转换规则在上方已经介绍
  3. 转为Number使用Number()进行转换,具体转换规则在上一篇文章

至于实例上的方法和属性会在写原型和对象关系的时候一起写。

这里就不讲原型和继承的一些东西了,等我写到那里的时候再详细讲,明天的内容是JS中的操作符

感兴趣的小伙伴可以期待一下emm....

Javascript高级编程学习笔记(4)—— JS中的数据类型(2)的更多相关文章

  1. Javascript高级编程学习笔记(3)—— JS中的数据类型(1)

    前一段时间由于事情比较多,所以笔记耽搁了一段时间,从这一篇开始我会尽快写完这个系列. 文章中有什么不足之处,还望各位大佬指出. JS中的数据类型 上一篇中我写了有关JS引入的Script标签相关的东西 ...

  2. Javascript高级编程学习笔记(5)—— JS操作符

    话不多说,开始今天的码字之旅. 突然有种日更小说的感觉,emm... 操作符 ECMAScript(JS核心)描述了一组用于操作数据值的操作符,也包括算术操作符等等 而JS中这些操作符最鲜明的特点就是 ...

  3. Javascript高级编程学习笔记(43)—— 动态脚本

    动态脚本 大多数情况下,DOM操作都很简洁明了 因为DOM主要就是用来操作页面中的可视节点的 但有些时候我们又希望可以动态的来进行DOM操作 其中的一部分也就是今天我们的内容动态脚本 动态脚本是什么意 ...

  4. Javascript高级编程学习笔记(35)—— DOM(1)节点

    DOM JS由三部分组成 1.BOM 2.DOM 3.ECMAScript ES和BOM在前面的文章已经介绍过了 今天开始JS组成的最后一部分DOM(文档对象模型) 我们知道,JS中的这三个部分实际上 ...

  5. Javascript高级编程学习笔记(25)—— 函数表达式(3)模仿块级作用域

    昨天写了闭包 今天就来聊聊块级作用域的事情 在绝大多数编程语言中,都有块级作用域这个概念 什么是块级作用域呢? 前面我们在刚开始讲的时候说过,JS中的大括号(不在赋值运算符的后面)表示代码块 块级作用 ...

  6. Javascript高级编程学习笔记(23)—— 函数表达式(1)递归

    前面的文章中,我在介绍JS中引用类型的时候提过,JS中函数有两种定义方式 第一种是声明函数,即使用function关键字来声明 第二种就是使用函数表达式,将函数以表达式的形式赋值给一个变量,这个变量就 ...

  7. Javascript高级编程学习笔记(18)—— 引用类型(7)单体内置对象

    什么是内置对象呢? js高级程序设计中给出的定义为:由ES规定不依赖于宿主环境的对象,这些对象在JS执行前就已经存在 前面我们介绍的引用类型都是内置对象 除了这些对象外ECMA还规定了两个单体内置对象 ...

  8. Javascript高级编程学习笔记(15)—— 引用类型(4)RegExp类型

    JS中处理字符串最常用的应该就是正则了 同样正则(RegExp)类型也是JS中引用类型的一种 ECMAScript通过 RegExp类型 来支持正则表达式 创建正则 var expression = ...

  9. Javascript高级编程学习笔记(10)—— 作用域、作用域链

    昨天介绍了,JS中函数的作用域 什么词法环境之类的,可能很多小伙伴不太明白. 在今天的内容开始之前,先做个简短的声明: 词法环境这一概念是在ES5中提出的,因为词法环境主要用于保存let.const声 ...

随机推荐

  1. laravel PHPExcel 使用小结

    最近需求要用到PHPExcel,laravel框架中有相应的组件https://github.com/Maatwebsite/Laravel-Excel,我用的是2.1的(3.0文档不详细而且坑似乎也 ...

  2. python学习记录

    学习python中······· 今天写了个装饰器用来登录用,用户名和密码是存在文件里的,涉及到了装饰器和带参数的装饰器 文件里的内容如下 {"liming": 123456} { ...

  3. Linux命令行报错 bash: cannot create temp file for here-document: No space left on device

    今天Linux服务器出问题了,使用"tab"补全命令时,提示 bash: cannot create temp file for here-document: No space l ...

  4. 利用PHPExcel导出excel 以及利用js导出excel

    导出excel的方法output_excel需要依赖PHPExcel 导出csv的方法csv_export不需要 <?php /** * @author ttt */ class ExcelCo ...

  5. django admin 模块添加 static

    目前路径是在 /var/www/jastme/static 但是admin的静态文件不在这个位置,那么怎么办呢? 首先到项目下,就是有manage.py的这个目录 编辑项目下的setting.py 首 ...

  6. 关于EL表达式随笔记录

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  7. c# NPOI 导出EXCEL (在下方显示图片)

    需要引入dll文件 也可以在NuGet里面管理(推荐) 比较方便 . using System; using System.Collections.Generic; using System.Linq ...

  8. FortiGate 5.2/5.4 SSLVPN建立

    1.定义源IP池 即用户通过sslvpn拨号成功后获取到的IP地址. 2.定义路由地址 即用户通过sslvpn拨号成功后允许获取到的路由表. 3.建立sslvpn portal 4.定义用户和用户组 ...

  9. Eigen矩阵基本运算

    1 矩阵基本运算简介 Eigen重载了+,-,*运算符.同时提供了一些方法如dot(),cross()等.对于矩阵类的运算符重载只支持线性运算,比如matrix1*matrix2是矩阵相乘,当然必须要 ...

  10. Mouse Detected Problem

    通常分三种情形: 鼠标完全不工作鼠标工作一段时间后不工作鼠标的按钮或者滚轮不工作 必要提交信息:1.鼠标的具体厂商和型号2.鼠标连接PC方式:串口.PS/2.USB或无线USB等:3.鼠标的工作机制: ...