《JS原理、方法与实践》- 直接量及其相关对象
来源:     阅读:409
依创模板店
发布于 2020-11-08 03:20
查看主页

直接量时指不需要创立对象即可以直接使用的变量。ES中的直接量主要有三种类型:表示字符串的string类型、表示数字的number类型和表示true/false的boolean类型。当我们直接将值赋给变量后,ES就会自动判断其类型,而且当参数发生变化后,其类型也会自动跟着变化,即ES时一种弱类型的语言。
直接量直接使用两块内存来保存它们的名值对,而不像对象类型需要3块内存。


直接量属性和对象属性的内存模型

直接量的封包与解包

ES中有一种叫做自动封包/解包的功能,相似.net/java中的装箱/拆箱,其作用时在程序执行过程中按照需要自动在直接量和其对象的对象类型间进行转化。将直接量转换为对应的对象进行解决叫封包,反过来,将对象转换为直接量叫解包。

代码示例:

var m = new Number(5);var n = m + 2;console.log(n); // 7console.log(typeof m); // objectconsole.log(typeof n); // number

直接量的包装对象

直接量所对应的对象叫做包装对象,string、number、boolean所对应的包装对象分别是String、Number、Boolean对象。它们都是function类型的对象。
一个对象最重要的就是它所包含的属性,而function对象的属性又分为两大类,一类是它自身的属性,另一类是它所创立的object类型实例对象的属性,创立的实例对象的属性又分为实例自己的属性和function的prototype的属性。

String对象

String对象是function类型的对象,对应的是字符串类型,可用来创立字符串类型的object类型,例如: new String('abc');

String自身的属性

String类型自身只有两个属性,一个prototype,另一个是fromCharCode。fromCharCode方法的作用是创立由Unicode值所对应的字符组成的字符串,需要一个或者多个参数。
代码示例:

var s = String.fromCharCode(97,98,99);console.log(s); // abc
String.prototype中的属性
var s = new String('Hello World');console.log(s.toString()); // Hello World
var s = new String('Hello World');console.log(s.valueOf()); // Hello World
var s = new String('Hello World');console.log(s.charAt(3)); // l
var s = new String('aHello World');console.log(s.charCodeAt(0)); // 97
var s = 'hello';var s1 = s.concat(' world');console.log(s1); // hello world
var s = 'hello world';console.log(s.indexOf('l')); // 2console.log(s.indexOf('or')); // 7
var s = 'hello world';console.log(s.lastIndexOf('l')); // 9, 注意:这里是9, 下面的是3console.log(s.lastIndexOf('l', 3)); // 3
console.log('a'.localeCompare('b')); // -1console.log('b'.localeCompare('a')); // 1console.log('a'.localeCompare('a')); // 0
console.log('hello javaScript'.match('Script')); // ["Script"]console.log('hello'.match('Script')); // null console.log('hello javaScript'.match(/script/i)); // ["Script"]console.log('hello javaScript'.match(/a+/g)); // ['a','a']
var a = 'beneficial';console.log(a.replace('e', 'E')); // bEneficialconsole.log(a.replace(/e/, 'E')); // bEneficialconsole.log(a.replace(/e/g, 'E')); // bEnEficial
var s = 'hello ECMAScritpt';console.log(s.slice(6, 10)); // ECMAconsole.log(s.slice(6, -7)); // ECMAconsole.log(s.slice(6)); // ECMAScritpt
var s = 'hello ECMAScritpt';console.log(s.substring(6, 10)); // ECMAconsole.log(s.substring(10, 6)); // ECMAconsole.log(s.substring(6)); // ECMAScritptconsole.log(s.substring(-5)); // hello ECMAScritpt
var s = 'hello world';console.log(s.split(" ")); // [ 'hello', 'world' ]console.log(s.split(" ", 1)); // [ 'hello' ]console.log(s.split()); // [ 'hello world' ]
var s = 'Hello World';console.log(s.toLowerCase()); // hello world
var s = 'Hello World';console.log(s.toLocaleLowerCase()); // hello world
var s = ' Hello World    ';console.log(s.trim()); // Hello World
String创立的对象实例的属性
var s = new String('Hello World');console.log(s.length); // 11console.log(s[0]); // H

Numver对象

Number对象是function类型的对象,对应的是数字类型,可用来创立数字类型的object对象。

Number自身的属性
Number.prototype属性
var n = 11;console.log(n.toString()); // 11console.log(n.toString(2)); // 1011console.log((255).toString(16)); //ff
var n = 5201314; console.log(n.toLocaleString()); // 5,201,314console.log(n.toLocaleString('zh-Hans-CN-u-nu-hanidec')); // 五,二〇一,三一四
var n = new Number(520);console.log(typeof n); // objectconsole.log(typeof n.valueOf()); // number
console.log(123.456.toFixed()); // 123console.log(123.456.toFixed(2)); // 123.46console.log(123.456.toFixed(5)); // 123.45600console.log(13.14e5.toFixed(6)); // 1314000.00000
console.log(123.456.toExponential()); // 1.23456e+2console.log(123.456.toExponential(2)); // 1.23e+2
console.log(123.456.toPrecision(4)); // 123.5console.log(123.456.toPrecision(2)); // 1.2e+2
Number创立的示例对象的属性

Number创立的实例对象没有自己的命名属性。

Boolean对象

Boolean对象是function类型的对象,对应的是布尔类型,可用来创立布尔类型的object实例对象。

Boolean自身的属性

只有一个prototype属性

Boolean.prototype的属性

Boolean的prototype一共有三个属性: constructor、toString和valueOf。constructor指向Boolean本身,toString和valueOf都返回实例对象的值,但它们类型不一样,toString返回的string类型,而valueOf返回boolean类型。
代码示例:

var b = new Boolean(true);console.log(b.toString());  // 'true'console.log(b.valueOf()); // trueconsole.log(typeof b); // objectconsole.log(typeof b.toString()); // stirngconsole.log(typeof b.valueOf()); // boolean
多知道点: 如何在浏览器中产看对象的属性

代码示例:

// 获取String对象自身的属性console.log(Object.getOwnPropertyNames(String));// ["length", "name", "prototype", "fromCharCode", "fromCodePoint", "raw"]// 获取String的prototype的属性console.log(Object.getOwnPropertyNames(String.prototype));// ["length", "constructor", "anchor", "big", "blink", "bold", "charAt", "charCodeAt", // "codePointAt", "concat", "endsWith", "fontcolor", "fontsize", "fixed", "includes", // "indexOf", "italics", "lastIndexOf", "link", "localeCompare", "match", "matchAll", // "normalize", "padEnd", "padStart", "repeat", "replace", "search", "slice", "small", // "split", "strike", "sub", "substr", "substring", "sup", "startsWith", "toString", // "trim", "trimStart", "trimLeft", "trimEnd", "trimRight", "toLocaleLowerCase", // "toLocaleUpperCase", "toLowerCase", "toUpperCase", "valueOf"]// 获取String创立的对象实例的属性console.log(Object.getOwnPropertyNames(new String()));// ["length"]

假如觉得文章写得还行,请点个赞。假如想与我进一步交流,可以关注我的公众号或者者加我的微信。

个人微信
公众号_前台微说.jpg
免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 windows
相关推荐
首页
搜索
订单
购物车
我的