JS直接量及其相关对象

什么是直接量

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

直接量的封包与解包

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

代码示例:

var m = new Number(5);
var n = m + 2;

console.log(n); // 7
console.log(typeof m); // object
console.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中的属性

  • constructor: 默认指向Stirng对象本身
  • toString: 重写了toString方法,所以字符串的toString不会返回[object, Obejct]
    或者[object, String]而是返回字符串本身的值。
    代码示例:
var s = new String('Hello World');
console.log(s.toString()); // Hello World
  • valueOf: 返回字符串本身
    代码示例:
var s = new String('Hello World');
console.log(s.valueOf()); // Hello World
  • charAt: 这个方法用来获取指定位置的字符,序号从0开始
    代码示例:
var s = new String('Hello World');
console.log(s.charAt(3)); // l
  • charCodeAt: 这个方法和charAt类似,但它获取的是Unicode值。
    代码示例:
var s = new String('aHello World');
console.log(s.charCodeAt(0)); // 97
  • concat: 这个方法可以将多个字符串连接在一起组成一个新字符串。此时s并不会有变化。
    代码示例:
var s = 'hello';
var s1 = s.concat(' world');
console.log(s1); // hello world
  • indexOf: 这个方法用来查找指定的字符或者字符串,它有两个参数,第一个参数是要查找的字符或字符串;第二个参数可选,代表查找的起始位置,如果省略,默认从第一个字符开始查找
    代码示例:
var s = 'hello world';

console.log(s.indexOf('l')); // 2
console.log(s.indexOf('or')); // 7
  • lastIndexOf: 这个方法与indexOf的用法一样,不同之处在于: indexOf是从前往后找,而lastIndexOf是从后往前找,并且lastIndexOf的第二个参数position的作用是指定查找的字符串的结束位置(从0开始计数)
    代码示例:
var s = 'hello world';

console.log(s.lastIndexOf('l')); // 9, 注意:这里是9, 下面的是3
console.log(s.lastIndexOf('l', 3)); // 3
  • localeCompare: 这个方法的作用是使用本地化方式比较字符串,类似于>、<的作用,但是>、<只能依据Unicode编码来比较字符串的大小,而有些地区的字符顺序和Unicode编码并不一样,这是就需要使用localeCampare方法来比较。
    代码示例:
console.log('a'.localeCompare('b')); // -1
console.log('b'.localeCompare('a')); // 1
console.log('a'.localeCompare('a')); // 0
  • match: 这个方法用于匹配指定的内容,如果传入的参数为字符串,则会匹配字符串,如果传入的是正则表达式,则会返回于正则表达式相匹配的内容:
    代码示例:
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']
  • replace: 这个方法用来将字符串中指定的内容替换为新内容,要替换的内容可以是字符串也可以是正则表达式。默认只会替换第一个符合条件的内容,使用正则表达式可以使用g来替换全部符合条件的内容。replace不会改变原来对象的值,而是返回新的对象。
    代码示例:
var a = 'beneficial';

console.log(a.replace('e', 'E')); // bEneficial
console.log(a.replace(/e/, 'E')); // bEneficial
console.log(a.replace(/e/g, 'E')); // bEnEficial
  • slice: 这个方法用于截取字符串的一部分,它有两个参数,分别表示要截取的字符串的起始位置和结束位置,如果大于0, 则从前面技术,如果小于0,则从后面计数,如果省略第二个参数,则会截取到字符串的末尾。slice也不会改变原来的字符串。
    代码示例:
var s = 'hello ECMAScritpt';
console.log(s.slice(6, 10)); // ECMA
console.log(s.slice(6, -7)); // ECMA
console.log(s.slice(6)); // ECMAScritpt
  • substring: 这个方法和slice类似,也是截取字符串中的一部分,它有两个参数,分别表示要截取的字符串的起始位置和结束位置,所不同的是substring中结束位置在起始位置之前,则会自动将其调换后再截取,当参数小于0时会按0处理。substr方法虽然在主流浏览器中可以使用,但并不是标准里的方法,随时可能被舍弃,不建议使用。
    代码示例:
var s = 'hello ECMAScritpt';
console.log(s.substring(6, 10)); // ECMA
console.log(s.substring(10, 6)); // ECMA
console.log(s.substring(6)); // ECMAScritpt
console.log(s.substring(-5)); // hello ECMAScritpt
  • split: 这个方法用于按照指定分隔符将字符串转换为字符串数组。split方法有两个参数,第一个参数时分隔符,如果不为空则使用它来分割字符串,如果为空则按照字符分割字符串;第二个参数可选,表示需要返回数组中元素的个数,如果省略则将分割后的元素全部返回。
    代码示例:
var s = 'hello world';
console.log(s.split(" ")); // [ 'hello', 'world' ]
console.log(s.split(" ", 1)); // [ 'hello' ]
console.log(s.split()); // [ 'hello world' ]
  • toLowerCase: 这个方法的作用是将字符串转换为小写形式
    代码示例:
var s = 'Hello World';
console.log(s.toLowerCase()); // hello world
  • toLocaleLowerCase: 使用本地语言将字符串转换为小写
    代码示例:
var s = 'Hello World';
console.log(s.toLocaleLowerCase()); // hello world
  • toUpperCase/toLocaleUpperCase: 同转换小写的方式,将字符串转换成大写。

  • trim: 去掉字符串头部和尾部的空格:
    代码示例:

var s = ' Hello World    ';
console.log(s.trim()); // Hello World

String创建的对象实例的属性

  • length属性和类似于数组,属性名为0到length-1,属性值为序号所对应的字符:
    代码示例:
var s = new String('Hello World');
console.log(s.length); // 11
console.log(s[0]); // H

Number对象

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

Number自身的属性

  • prototype:原型对象
  • MAX_VALUE: 用来表示最大的数,其值约为1.7976931348623175*10^308
  • MIN_VALUE: 用来表示最小数, 约为5*10^-324
  • NaN: Not a Number缩写
  • NEGATIVE_INFINITY:表示负无穷大
  • POSITIVE_INFINITY: 表示正无穷大

Number.prototype属性

  • constructor: 这个属性默认指向Number对象本身
  • toString: Number的prototype重写了toString方法,重写后的toString方法会返回数字的字符串形式,还可以指定要转换为数字的基数,即指定几进制,默认十进制。
    代码示例:
var n = 11;
console.log(n.toString()); // 11
console.log(n.toString(2)); // 1011
console.log((255).toString(16)); //ff
  • toLocaleString: 这个方法会按照数字的本地表示法来输出
    代码示例:
var n = 5201314; 
console.log(n.toLocaleString()); // 5,201,314
console.log(n.toLocaleString('zh-Hans-CN-u-nu-hanidec')); // 五,二〇一,三一四
  • valueOf: 返回数字的直接量
    代码示例:
var n = new Number(520);
console.log(typeof n); // object
console.log(typeof n.valueOf()); // number
  • toFixed: 这个方法用来指定数字的精度,即保留几位小数。它的参数为要保留小数的位数,如果不指定则按0处理,即没有小数,并且它会按需要自动进行四舍五入。
    代码示例:
console.log(123.456.toFixed()); // 123
console.log(123.456.toFixed(2)); // 123.46
console.log(123.456.toFixed(5)); // 123.45600
console.log(13.14e5.toFixed(6)); // 1314000.00000
  • toExponential: 此方法的作用是将数字转换为科学计数法来表示,有一个可选参数,表示保留小数的位数,如果省略参数,则将输出尽可能多的数字。
    代码示例:
console.log(123.456.toExponential()); // 1.23456e+2
console.log(123.456.toExponential(2)); // 1.23e+2
  • toPrecision: 这个方法用于将数字格式话为指定位数(包括整数和小数)。如果指定的位数小于数字的整数部分,那么将使用科学计数法来表示。
    代码示例:
console.log(123.456.toPrecision(4)); // 123.5
console.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()); // true

console.log(typeof b); // object
console.log(typeof b.toString()); // stirng
console.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"]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/443546.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vulhub中Weblogic < 10.3.6 ‘wls-wsat‘ XMLDecoder 反序列化漏洞(CVE-2017-10271)复现

Weblogic的WLS Security组件对外提供webservice服务&#xff0c;其中使用了XMLDecoder来解析用户传入的XML数据&#xff0c;在解析的过程中出现反序列化漏洞&#xff0c;导致可执行任意命令。 访问http://your-ip:7001/即可看到一个404页面&#xff0c;说明weblogic已成功启动 …

缩放算法优化步骤详解

添加链接描述 背景 假设数据存放在在unsigned char* m_pData 里面&#xff0c;宽和高分别是&#xff1a;m_nDataWidth m_nDataHeight 给定缩放比例&#xff1a;fXZoom fYZoom&#xff0c;返回缩放后的unsigned char* dataZoom 这里采用最简单的缩放算法即&#xff1a; 根据比…

万用表你用对了吗?小白必读!

1&#xff0c;数字万用表类型 数字万用表分&#xff1a;手持万用表和台式万用表。 2&#xff0c;万用表基本介绍 &#xff08;1&#xff09;选择开关 万用表的选择开关是一个多档位的旋转开关&#xff0c;用来选择测量档位和量程。一般的万用表测量档位包括如下图&#xff1…

macOS上实现「灵动岛」效果

自从Apple iPhone推出了「灵动岛」功能后&#xff0c;用户们就被其优雅的设计和强大的功能所吸引。然而&#xff0c;作为macOS用户&#xff0c;我们一直在等待这一功能能够在我们的设备上实现。现在&#xff0c;随着新的应用程序的推出&#xff0c;我们终于可以在我们的Mac上体…

Java高频面试之Mysql篇

有需要互关的小伙伴,关注一下,有关必回关,争取今年认证早日拿到博客专家 请说下你对 MySQL 架构的了解&#xff1f; mysql是一个c/s架构的数据库管理系统, 客户端可以是图形化界面,也可以是命令行或者java等程序 服务端由一下组成部分 连接管理器:管理连接,管理线程,验证身…

Docker的安装及MySQL的部署(CentOS版)

目录 1 前言 2 Docker安装步骤 2.1 卸载可能存在的旧版Docker 2.2 配置Docker的yum库 2.2.1 安装yum工具 2.2.2 配置Docker的yum源 2.3 安装Docker 2.4 启动和校验 2.5 配置镜像加速(使用阿里云) 2.5.1 进入控制台 2.5.2 进入容器镜像服务 2.5.3 获取指令并粘贴到…

leetcode 1143. 最长公共子序列【动态规划】

leetcode 1143. 最长公共子序列 int longestCommonSubsequence(char* text1, char* text2) {int len1 strlen(text1);int len2 strlen(text2);int dp[len1 1][len2 1];memset(dp, 0, sizeof(dp));for (int i 1; i < len1; i) {for (int j 1; j < len2; j) {if (t…

Clock Verification IP

Clock Verification IP IP 参数及接口 IP 例化界面 相关函数 start_clock //产生时钟 <hierarchy_path>.IF.start_clockstop_clock //停止时钟 <hierarchy_path>.IF.stop_clockset_initial_value //设置时钟初始值为 0 <hierarchy_path>IF.set_initia…

基于springboot实现图书推荐系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现图书馆推荐系统演示 摘要 时代的变化速度实在超出人类的所料&#xff0c;21世纪&#xff0c;计算机已经发展到各行各业&#xff0c;各个地区&#xff0c;它的载体媒介-计算机&#xff0c;大众称之为的电脑&#xff0c;是一种特高速的科学仪器&#xff0c;比…

【数据结构】用栈实现队列

前言&#xff1a;本节博客分享了用栈实现队列效果的思路以及代码&#xff0c;有需要借鉴即可。 1.题目及链接 LINK 2.思路分析 如果要用栈实现队列&#xff0c;我们直到栈是先入后出的一个效果&#xff0c;所以我们可以用两个栈&#xff0c;这样逆转两次数不就是入栈之前数组…

2023护网蓝初面试

目录 一、渗透测试的流程 二、常见的漏洞 三、中间件漏洞 四、SQL注入原理、种类&#xff1f;防御&#xff1f;预编译原理&#xff0c;宽字节注入原理 预编译原理&#xff1a; 宽字节注入原理&#xff1a; 五、XSS的种类有哪些&#xff1f;区别&#xff1f;修复&#xf…

【每日刷题】栈与队列-LC394、LC347、LC215

题外话&#xff1a;感觉脑子没长到栈这块…最近刷栈的题都好难啊…哭哭…坚持坚持&#xff01;多刷几遍就好了&#xff01;&#xff01; 1. LC394.字符串解码 题目链接 先说数据结构。 维护两个栈&#xff1a;一个栈存之前的字符串&#xff0c;另一个栈存之后的字符串的重复…

深入解析汽车MCU的软件架构

一、背景知识 电动汽车&#xff08;EV&#xff09;正在成为首选的交通方式&#xff0c;为传统内燃机汽车提供了一种可持续发展的环保型替代方案。在电动汽车复杂的生态系统中&#xff0c;众多电子控制单元&#xff08;ECU&#xff09;在确保其高效运行方面发挥着至关重要的作用…

HashSet在添加元素时,是如何判断元素重复的?

前言&#xff1a;我们知道Set中所存储的元素是不重复的&#xff0c;那么Set接口的实现类HashSet在添加元素时是怎么避免重复的呢&#xff1f; HashSet在添加元素时&#xff0c;是如何判断元素重复的? ● 在底层会先调用hashCode()&#xff0c;注意&#xff0c;Obje…

计算机系统

一、进制的转换 1.进制的表示 二进制&#xff08;B&#xff09;&#xff1a; 0&#xff0c;1&#xff0c;10 八进制&#xff08;O&#xff09;&#xff1a; 0&#xff0c;1&#xff0c;2&#xff0c;7&#xff0c;10&#xff0c;11 十进制&#xff08;D&#xff09;&#xff…

【c++】string模拟实现

string类的接口 namespace zjw {class string{public:typedef char* iterator;typedef const char* const_iterator;private:char* _str;int _size;int _capacity;};这里的迭代器直接使用原生指针来封装。 _str为指向string数组的首地址的指针。 _size为string数组的大小。 …

基于机器学习的网络入侵检测二元分类模型构建与性能评估(NSL-KDD数据集)

简介 该项目是一个基于NSL-KDD数据集的网络入侵检测系统&#xff0c;主要采用机器学习方法对网络流量数据进行使用了多种机器学习模型&#xff0c;如逻辑回归、线性SVM、多项式核SVM、高斯核SVM、决策树、随机森林、朴素贝叶斯和K近邻算法训练二元分类&#xff08;正常/异常&a…

漫谈技术成长

引言 相信很多程序员在自己的技术成长之路上&#xff0c;总会遇到许许多多的难关&#xff0c;有些难关咬咬牙就过去了&#xff0c;而有点难关则需要有一定的能力&#xff0c;才能克服。因此&#xff0c;本文主要围绕“技术成长” 话题&#xff0c;为何会选择技术方向&#xff0…

数据结构从入门到精通——队列

队列 前言一、队列1.1队列的概念及结构1.2队列的实现1.3队列的实现1.4扩展 二、队列面试题三、队列的具体实现代码Queue.hQueue.ctest.c队列的初始化队列的销毁入队列出队列返回队头元素返回队尾元素检测队列是否为空检测元素个数 前言 队列是一种特殊的线性数据结构&#xff…

练习ROS动作编程

ROS学习记录&#xff1a;动作编程 引言&#xff1a; ​ 通过本实验&#xff0c;我们将联系我们学过的动作编程&#xff0c;客户端发送一个运动目标,模拟小乌龟运动到目标位置的过程,包含服务端和客户端的代码实现&#xff0c;并且带有实时的位置反馈。 希望你在本次学习过后&am…