《JavaScript高级程序设计》阅读笔记(三):ECMAScript中的引用类型

简介:

2.8 引用类型

1、Object类

  ECMAScript中的所有类都是由Object类继承而来。

  Object类具有下列属性:

  Constructor:对创建对象的函数的引用(指针),对于Object类,该指针指向原始的Object()函数

  Prototype:对该对象的对象原型的引用。

  Object类还有几个方法:

  HasOwnProperty(property):判断对象是否有某个特定的属性。必须用字符串指定该属性值

  IsPrototypeOf(object):判断该对象是否为另一个对象的原型。

  PropertyIsEnumerable(property):判断给定的属性是否可以用for...in语句进行枚举

  ToString():返回对象的原始字符串表示。

  ValueOf():返回最适合该对象的原始值。对于许多类,该方法返回的值都与toString()的返回值相同。

  上面列出的每种属性和方法都会被其他类覆盖。

2、Boolean类

  在ECMAScript中很少使用Boolean对象,因为不易理解,如:

1 var oFalseObject = new Boolean(false);
2 var bResult= oFalseObject && true; //outpus true

  在这段代码中,用false值创建Boolean对象,然后用这个值与原始值true进行 AND 操作。在Boolean运算中,false和true进行AND 操作的结果是 false。不过,在这行代码中,计算的是oFalseObject,而不是它的值false。在Boolean表达式中,所有对象都会被自动转换为true,所以结果为true。参考下面的代码:

1 var oFalseObject = new Boolean(false);
2 var bResult= oFalseObject && true; //outpus true
3 var bResult2= oFalseObject.valueOf() && true; //outpus false

3、Number类

  Number的toString()方法在上篇文章中有详细的介绍。

  Number有几个处理数值的专用方法:

  toFixed(参数):返回的是具有指定位数小数的数字的字符串表示。参数范围为0—20

  toExponential(参数):返回的是用科学计数法表示的数字的字符串形式。与toFixed()方法相似,toExponential()也有一个参数要输出的小数的位数。参数范围为0—20

  toPrecision(参数):根据最有意义的形式来返回数字的预定形式或指数形式。它有一个参数,即用于表示数字总数(不包括指数)。参数最小为1

  以上三个方法都会进行舍入操作。示例代码:

 1 var oNumber=new Number(99);
2 console.log(oNumber.toFixed(0)); //outpus 99
3 console.log(oNumber.toFixed(2)); //outpus 99.00
4
5 var oNumber1=new Number(99);
6 console.log(oNumber1.toExponential(0)); //outpus 1e+2 进行了舍入操作
7 console.log(oNumber1.toExponential(1)); //outpus 9.9e+1
8 console.log(oNumber1.toExponential(2)); //outpus 9.90e+1
9
10 var oNumber3=new Number(99);
11 console.log(oNumber3.toPrecision(0)); //outpus error precision 0 out of range
12 console.log(oNumber3.toPrecision(1)); //outpus 1e+2 进行了舍入操作
13 console.log(oNumber3.toPrecision(2)); //outpus 99
14 console.log(oNumber3.toPrecision(3)); //outpus 99.0

4、String类

  String对象的valueOf()方法和toString()方法都会返回String型的原始值:

1 var oStringObject=new String("Hello world");
2 console.log(oStringObject.valueOf() == oStringObject.toString());//outpus true

  String类具有length属性,它是字符串中的字符个数,双字节字符也算一个字符。

  String类有大量的方法,主要介绍如下:

  charAt(整型参数):返回字符串中单个字符。示例:

1 var oStringObject=new String("Hello world");
2 console.log(oStringObject.charAt(0));//outpus "H"
3 console.log(oStringObject.charAt(1));//outpus "e"
4 console.log(oStringObject.charAt(11));//outpus (an empty string)

  charCodeAt(整型参数):返回字符串中单个字符代码。示例:

1 var oStringObject=new String("Hello world");
2 console.log(oStringObject.charCodeAt(0));//outpus "72"
3 console.log(oStringObject.charCodeAt(1));//outpus "101"
4 console.log(oStringObject.charCodeAt(11));//outpus NaN

  concat(字符串):把一个或多个字符串连接到String对象的原始值上。示例:

1 var oStringObject=new String("Hello world");
2 var sResult=oStringObject.concat(" Concat");
3 console.log(oStringObject);//outpus "String { 0="H", 1="e", 2="l", ...}"
4 console.log(sResult);//outpus "Hello world Concat"
5 alert(oStringObject);//outpus "Hello world"

  indexOf(字符串):返回指定的字符串在另一个字符串中的位置(从字符串的开头进行检索)。

  lastIndexOf(字符串):返回指定的字符串在另一个字符串中的位置(从字符串的结尾进行检索)。示例:

1 var oStringObject=new String("Hello Hello");
2 console.log(oStringObject.indexOf("lo"));//outpus 3
3 console.log(oStringObject.lastIndexOf("lo"));//outpus 9

  localeCompare(字符串):对字符串进行排序,返回值是下列三个之一:

  A、如果String对象按照字母顺序排在参数中的字符串之前,返回负数(通常是-1,但真正返回值由具体实现决定)

  B、如果String对象等于参数中的字符串,返回0

  C、如果String对象按照字母顺序排在参数中的字符串之后,返回正数(通常是1,但真正返回值由具体实现决定)

  示例:

1 var oStringObject=new String("Hello");
2 console.log(oStringObject.localeCompare("aello")); //outpus 1
3 console.log(oStringObject.localeCompare("Hello")); //outpus 0
4 console.log(oStringObject.localeCompare("zello")); //outpus -1

  slice(整型参数[,整型参数])、substring(整型参数[,整型参数]):从子串创建字符串值。第一个参数是要获取的子串的起始位置,第二个参数是要获取的子串终止前的位置,如果省略第二参数,终止位就默认为字符串长度。这两个方法都不改变String对象自身值。当参数为正时两个方法用法及返回值均相同,只有参数有负值时才不同。对于负参数,slice()方法会用字符串的长度加上参数,substring()将其做为0处理。另外如果有两个参数,第二个比第一个小时,slice()返回的值为空,substring()会把较小的作为第一个参数。为示例:

 1 var oStringObject=new String("Hello World");
2 console.log(oStringObject.slice(3)); //outpus "lo World"
3 console.log(oStringObject.substring(3)); //outpus "lo World"
4 console.log(oStringObject.slice(3,7)); //outpus "lo W"
5 console.log(oStringObject.substring(3,7)); //outpus "lo W"
6 console.log(oStringObject.slice(3,0)); //outpus (an empty string)
7 console.log(oStringObject.substring(3,0)); //outpus "Hel"
8
9 console.log(oStringObject.slice(-3)); //outpus "rld"
10 console.log(oStringObject.substring(-3)); //outpus "Hello World"
11 console.log(oStringObject.slice(3,-4)); //outpus "lo W"
12 console.log(oStringObject.substring(3,-4)); //outpus "Hel"

  toLowerCase()、toLocaleLowerCase()、toUpperCase()、toLocaleUpperCase():前两个用于把字符串转换为全小写,后两个用于把字符串转换为全大写。toLowerCase()跟toUpperCase()是原始方法,toLocaleLowerCase()跟toLocaleUpperCase()是基于特定区域实现的。示例:

1 var oStringObject=new String("Hello World");
2 console.log(oStringObject.toLowerCase()); //outpus "hello world"
3 console.log(oStringObject.toLocaleLowerCase()); //outpus "hello world"
4 console.log(oStringObject.toUpperCase()); //outpus "HELLO WORLD"
5 console.log(oStringObject.toLocaleUpperCase()); //outpus "HELLO WORLD"
  

5、instanceof运算符

    在使用typeof运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回"object"。ECMAScript引入了另一个运算符 instanceof 来解决这个问题。
  instanceof运算符与typeof运算符相似,用于识别正在处理的对象的类型。与typeof方法不同的是,instanceof 方法要求开发者明确地确认对象为某特定类型。示例:
1 var oStringObject=new String("hello world");
2 alert(oStringObject instanceof String); //outpus "true"




本文转自Artwl博客园博客,原文链接:http://www.cnblogs.com/artwl/,如需转载请自行联系原作者

相关文章
|
2月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
45 0
|
24天前
|
JavaScript 前端开发 安全
ECMAScript 6(以下简称 ES6)的出现为 JavaScript 带来了许多新的特性和改进,其中 let 和 const 是两个非常重要的关键字。
ES6 引入了 `let` 和 `const` 关键字,为 JavaScript 的变量管理带来了革新。`let` 提供了块级作用域和暂存死区特性,避免变量污染,增强代码可读性和安全性;`const` 用于声明不可重新赋值的常量,但允许对象和数组的内部修改。两者在循环、函数内部及复杂项目中广泛应用,有助于实现不可变数据结构,提升代码质量。
23 5
|
23天前
|
自然语言处理 JavaScript 前端开发
ECMAScript 6 的出现为 JavaScript 带来了许多新的特性和改进
这些只是ES6的一些主要特性,它们极大地增强了JavaScript的功能和表现力,使得JavaScript在大型应用开发、前端框架等领域能够更加高效地编写复杂的应用程序。
|
1月前
|
自然语言处理 JavaScript 前端开发
[JS]同事看了我做的this笔记,直摇头,坦言:我还是参考启发博文吧
本文介绍了JavaScript中`this`关键字的重要性和使用规则。作者回顾了早期笔记,总结了`this`指向的各种情况,并分享了最新的理解。文章强调了`this`在不同上下文中的指向,包括对象方法、全局函数、箭头函数等,并提供了改变`this`指向的方法。适合JavaScript开发者参考。
48 2
|
1月前
|
存储 JavaScript 前端开发
js的基础类型和引用类型
【10月更文挑战第29天】理解 JavaScript 中的基础类型和引用类型的区别对于正确地编写代码和理解程序的行为非常重要。在实际开发中,需要根据具体的需求合理地选择和使用不同的数据类型,以避免出现一些意想不到的错误和问题。同时,在处理引用类型数据时,要特别注意对象的引用关系,避免因共享引用而导致的数据不一致等问题。
|
2月前
|
JavaScript 前端开发 编译器
掌握现代化JavaScript:ECMAScript提案与特性
【10月更文挑战第13天】本文介绍了ECMAScript(ES)的最新提案与特性,包括可选链、空值合并运算符、类字段和顶层Await等。通过跟踪TC39提案、使用Babel或TypeScript、测试兼容性以及逐步迁移,开发者可以高效地采用这些新特性,简化代码、提高开发效率并增强应用功能。文章还提供了实战技巧,帮助开发者在现代Web开发中充分利用这些现代化的特性。
|
2月前
|
存储 JavaScript 前端开发
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
JavaScript 数据类型分为基本数据类型和引用数据类型。基本数据类型(如 string、number 等)具有不可变性,按值访问,存储在栈内存中。引用数据类型(如 Object、Array 等)存储在堆内存中,按引用访问,值是可变的。本文深入探讨了这两种数据类型的特性、存储方式、以及检测数据类型的两种常用方法——typeof 和 instanceof,帮助开发者更好地理解 JavaScript 内存模型和类型检测机制。
95 0
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
|
3月前
|
JavaScript 前端开发 Java
JavaScript笔记(回顾一,基础知识篇)
JavaScript基础知识点回顾,包括语言定义、ECMAScript规范、字面量、变量声明、操作符、关键字、注释、流程控制语句、数据类型、类型转换和引用数据类型等。
JavaScript笔记(回顾一,基础知识篇)
|
3月前
|
Web App开发 JavaScript 前端开发
探索现代JavaScript开发:ECMAScript提案的未来
JavaScript是最受欢迎的编程语言之一,其发展迅速。ECMAScript(JS的标准化版本)的提案和更新为其带来了诸多新特性和改进。本文将介绍值得关注的ECMAScript提案,如可选链、空值合并运算符、逻辑赋值运算符、类字段和顶级Await,并展示如何利用这些新特性提升开发效率和代码质量。通过关注TC39提案流程、使用Babel和TypeScript等工具,开发者可以提前体验并利用这些新特性。随着JavaScript的不断进步,未来将有更多令人期待的功能加入。
|
4月前
|
JavaScript Linux 开发工具
开源项目:使用 Atom-Electron 和 Vue.js 制作的简单 RSS 阅读器!!
开源项目:使用 Atom-Electron 和 Vue.js 制作的简单 RSS 阅读器!!