JavaScript数组与对象

news/2024/5/3 18:06:25/文章来源:https://blog.csdn.net/qq_53225741/article/details/127062157

数组对象

「创建数组的两种方式」

  • 1. 字面量方式var arr = [1,"test",true];
  • 2. 实例化数组对象 new Array() var arr = new Array();
    • 注意:上面代码中arr创建出的是一个空数组,如果需要使用构造函数Array创建非空数组,可以在创建数组时传入参数* 如果只传入一个参数(数字),则参数规定了数组的长度。* 如果传入了多个参数,则参数称为数组的元素。

「检测是否为数组」

  • 1. instanceof 运算符
    • instanceof 可以判断一个对象是否是某个构造函数的实例
 var arr = [1, 23];var obj = {};console.log(arr instanceof Array); // trueconsole.log(obj instanceof Array); // false 
  • 2. Array.isArray()
    • Array.isArray()用于判断一个对象是否为数组,isArray() 是 HTML5 中提供的方法
 var arr = [1, 23];var obj = {};console.log(Array.isArray(arr));   // trueconsole.log(Array.isArray(obj));   // false 
  • 3. 注意 typeof用法
    • typeof 用于判断变量的类型
 var arr = [1, 23];console.log(typeof arr) // object 对象arr是构造函数的实例因此是对象数据类型 

「添加删除数组元素的方法」

  • 数组中有进行增加、删除元素的方法,部分方法如下表👇
 var arr = [1, 2, 3];console.log(arr.push(4, 5)); // 5 向数组末尾添加元素arr.pop(); //删除数组最后一个值并返回console.log(arr); // [1,2,3,4]// 向数组的开头添加元素并返回数组长度 console.log(arr.unshift(5, 6)); // 6  数组变为[5,6,1,2,3,4]console.log(arr.shift()); // 5 删除数组开头的元素并返回该值 

「数组排序」

  • 数组中有对数组本身排序的方法,部分方法如下表
方法名说明是否修改原数组
reverse()颠倒数组中元素的顺序,无参数该方法会改变原来的数组 返回新数组
sort()对数组的元素进行排序该方法会改变原来的数组 返回新数组
  • 注意:sort方法需要传入参数(函数)来设置升序、降序排序
    • 如果传入“function(a,b){ return a-b;}”,则为升序* 如果传入“function(a,b){ return b-a;}”,则为降序
 // 踩坑 数组sort()排序(冒泡排序) return a - b 则升序// 写法固定 参考如下var arr1 = [13,4,77,1,7];arr1.sort(function(a,b){return a-b;});console.log(arr1); 

「数组索引方法」

  • 数组中有获取数组指定元素索引值的方法,部分方法如下表
 var arr = [1, 2, 3, 4, 5, 4, 1, 2];// 查找元素2的索引console.log(arr.indexOf(2)); // 1// 查找元素1在数组中的最后一个索引console.log(arr.lastIndexOf(1)); // 6 

「数组转换为字符串」

  • 数组中有把数组转化为字符串的方法,部分方法如下表
  • 注意:join方法如果不传入参数,则按照 “ , ”拼接元素
 var arr = [1, 2, 3, 4];var arr2 = arr;var str = arr.toString(); // 将数组转换为字符串console.log(str); // 1,2,3,4var str2 = arr2.join("|");//按照键入字符将数组转换为字符串console.log(str2); 

「其他方法」

 var arr = [1, 2, 3, 4];var arr2 = [5, 6, 7, 8];var arr3 = arr.concat(arr2);console.log(arr3); // [1,2,3,4,5,6,7,8]// slice(begin,end) 是一种左闭右开区间 [1,3)// 从索引1出开始截取,到索引3之前var arr4 = arr.slice(1, 3);console.log(arr4); // [2,3]var arr5 = arr2.splice(0, 3);console.log(arr5); // [5,6,7]console.log(arr2); // [8]   splice()会影响原数组 

字符串对象

**「基本包装类型」**为了方便操作基本数据类型,JavaScript 还提供了三个特殊的引用类型:String、Number和 Boolean。基本包装类型就是把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法。

 // 下面代码有什么问题?var str = 'andy';console.log(str.length); // 4 
按道理基本数据类型是没有属性和方法的,而对象才有属性和方法,但上面代码却可以执行,这是因为 js 会把基本数据类型包装为复杂数据类型,其执行过程如下 :
 // 1. 生成临时变量,把简单类型包装为复杂数据类型var temp = new String('andy');// 2. 赋值给我们声明的字符变量str = temp;// 3. 销毁临时变量temp = null; 

「字符串的不可变」

  • 指的是里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间。
  • 当重新给字符串变量赋值的时候,变量之前保存的字符串不会被修改,依然在内存中重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变。
  • 由于字符串的不可变,在**「大量拼接字符串」**的时候会有效率问题

「根据字符返回位置」

  • 字符串通过基本包装类型可以调用部分方法来操作字符串,以下是返回指定字符的位置的方法:
 var str = "anndy";console.log(str.indexOf("d")); // 3//指定从索引号为4的地方开始查找字符"d"console.log(str.indexOf("d", 4)); // -1console.log(str.lastIndexOf("n")); // 2 

案例:查找字符串"abcoefoxyozzopp"中所有o出现的位置以及次数

1.先查找第一个o出现的位置
2.然后 只要indexOf 返回的结果不是 -1 就继续往后查找
3.因为indexOf 只能查找到第一个,所以后面的查找,利用第二个参数,当前索引加1,从而继续查找

 var str = "oabcoefoxyozzopp";var index = str.indexOf("o");var num = 0;while (index !== -1) {console.log(index);num++;index = str.indexOf("o", index + 1);} 

「根据位置返回字符」

  • 字符串通过基本包装类型可以调用部分方法来操作字符串,以下是根据位置返回指定位置上的字符:
 // 根据位置返回字符// 1. charAt(index) 根据位置返回字符var str = 'andy';console.log(str.charAt(3)); // y// 遍历所有的字符for (var i = 0; i < str.length; i++) {console.log(str.charAt(i));} // a n d y// 2. charCodeAt(index) //返回相应索引号的字符ASCII值 目的: 判断用户按下了那个键 console.log(str.charCodeAt(0)); // 97// 3. str[index] H5 新增的console.log(str[0]); // a 
  • 案例:判断一个字符串 ‘abcoefoxyozzopp’ 中出现次数最多的字符,并统计其次数
  • 1.核心算法:利用 charAt() 遍历这个字符串2.把每个字符都存储给对象, 如果对象没有该属性,就为1,如果存在了就 +13.遍历对象,得到最大值和该字符 注意:在遍历的过程中,把字符串中的每个字符作为对象的属性存储在对象中,对应的属性值是该字符出现的次数
 var str = "abcoefoxyozzopp";var o = {};for (var i = 0; i < str.length; i++) {var chars = str.charAt(i); // chars 是 字符串的每一个字符if (o[chars]) {// o[chars] 得到的是属性值o[chars]++;} else {o[chars] = 1;}}console.log(o);// 2. 遍历对象var max = 0;var ch = "";for (var k in o) {// k 得到是 属性名// o[k] 得到的是属性值if (o[k] > max) {max = o[k];ch = k;}}console.log(max);console.log("最多的字符是" + ch); 

「字符串操作方法」

  • 字符串通过基本包装类型可以调用部分方法来操作字符串,以下是部分操作方法:
 // 字符串操作方法// 1. concat('字符串1','字符串2'....)var str = 'andy';console.log(str.concat('red')); // andyred// 2. substr('截取的起始位置', '截取几个字符');var str1 = '改革春风吹满地';// 第一个2 是索引号的2 从第几个开始  第二个2 是取几个字符console.log(str1.substr(2, 2)); // 春风 
  • replace()方法
    • replace() 方法用于在字符串中用一些字符替换另一些字符,其使用格式如下:
字符串.replace(被替换的字符串, 要替换为的字符串); 
  • split()方法
    • split()方法用于切分字符串,它可以将字符串切分为数组。在切分完毕之后,返回的是一个新数组。* 其使用格式如下:
字符串.split("分割字符") 
 // 1. 替换字符 replace('被替换的字符', '替换为的字符')  它只会替换第一个字符var str = "andyandy";console.log(str.replace("a", "b")); // bndyandy// 有一个字符串 'abcoefoxyozzopp'  要求把里面所有的 o 替换为 *var str1 = "abcoefoxyozzopp";while (str1.indexOf("o") !== -1) {str1 = str1.replace("o", "*");}console.log(str1); // abc*ef*xy*zz*pp// 2. 字符转换为数组 split('分隔符') // 前面我们学过 join 把数组转换为字符串var str2 = "red, pink, blue";console.log(str2.split(",")); //[red,pink,blue]var str3 = "red&pink&blue";console.log(str3.split("&")); // [red,pink,blue] 

\


简单数据类型和复杂数据类型

「简单类型(基本数据类型、值类型)」:在存储时变量中存储的是值本身,包括string ,number,boolean,undefined,null\

「复杂数据类型(引用类型)」:在存储时变量中存储的仅仅是地址(引用),通过 new 关键字创建的对象(系统对象、自定义对象),如 Object、Array、Date等;

「堆栈」

  • 堆栈空间分配区别:
    • 1、栈(操作系统):由操作系统自动分配释放存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈;* 简单数据类型存放到栈里面* 2、堆(操作系统):存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收。
  • 简单数据类型的存储方式
    • 值类型变量的数据直接存放在变量(栈空间)中
  • 复杂数据类型的存储方式
    • 引用类型变量(栈空间)里存放的是地址,真正的对象实例存放在堆空间中

**「简单类型传参」**函数的形参也可以看做是一个变量,当我们把一个值类型变量作为参数传给函数的形参时,其实是把变量在栈空间里的值复制了一份给形参,那么在方法内部对形参做任何修改,都不会影响到的外部变量。

 function fn(a) {a++;console.log(a); }var x = 10;fn(x);console.log(x); 

运行结果如下

**「复杂数据类型传参」**函数的形参也可以看做是一个变量,当我们把引用类型变量传给形参时,其实是把变量在栈空间里保存的堆地址复制给了形参,形参和实参其实保存的是同一个堆地址,所以操作的是同一个对象。

 function Person(name) {this.name = name;}function f1(x) { // x = pconsole.log(x.name); // 2. 这个输出什么 ? x.name = "张学友";console.log(x.name); // 3. 这个输出什么 ? }var p = new Person("刘德华");console.log(p.name);    // 1. 这个输出什么 ? f1(p);console.log(p.name);    // 4. 这个输出什么 ? 

运行结果如下:

最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

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

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

相关文章

SpringCloud-19-Spring Cloud Hystrix介绍和服务端降级

8 Hystrix&#xff1a;Spring Cloud服务熔断与降级组件 8.1 分布式系统面临的问题 复杂分布式体系结构中的应用程序往往由多个服务组成&#xff0c;这些服务之间相互依赖&#xff0c;依赖关系错综复杂&#xff0c;每个依赖关系在某些时候将不可避免的失败&#xff01; 若一个…

最优化理论与方法2

凸优化问题&#xff1a; 对于最优化问题P&#xff1a; min f(x1, x2 , …,xn) s.t. : gi ( x1 , x2 , … , xn) < 0 , i 1 , … , m hi ( x1 , x2 , … , xn) 0 ,i 1 , … , l 1 . 记可行域为S { x ∈ Rn | gi(x)<0 , i1,…,m , hi(x)0 , i 1 , … , l.} 2.当f(x…

交通流域关键词

关键词&#xff1a; ●交通拥堵&#xff1a;traffic jam 或 traffic congestion ●元胞传输模型&#xff1a;cellular transport model 或 cell transport model(细胞传输模型) ●元胞自动机&#xff1a;cellular automata ●VSL(可变速度限制)&#xff1a;variable speed …

Python3 安装软件出现 cl.exe failed with exit status 2 错误

最近因项目需要&#xff0c;开始深入接触python。遇到的一些环境问题&#xff0c;分享下。 requirements.txt中包含一系列所需组件&#xff0c;部分组件安装会报cl.ext错误。 如错误问题&#xff1a;Python3 安装pycrypto 2.6.1 出现 cl.exe failed with exit status 2 错误 …

Android国际化多语言切换

关于App国际化&#xff0c;之前有讲到国际化资源、字符换、布局相关&#xff0c;想要了解的猛戳用力抱一下APP国际化。借着本次重构多语言想跟大家聊一下多语言切换&#xff0c;多语言切换对于一款国际化App来讲是重中之重&#xff0c;并非难事&#xff0c;但是若要做好也是一件…

LeetCode-136-只出现一次的数字

1、哈希表 利用哈希表记录每个元素和其出现的次数&#xff0c;最后遍历哈希表找到只出现一次的数字。缺点在于额外空间为O(n)O(n)O(n)。 class Solution { public:int singleNumber(vector<int> &nums) {unordered_map<int, int> hs;for (auto i: nums) {hs[…

疫情下低代码平台将是企业的曙光

全球疫情的爆发&#xff0c;加速了企业数字化转型进程&#xff0c;为了响应不断变化和增加的业务需求&#xff0c;需要充足的资金以及专业的开发人员才能够有效推行数字化管理。然而在这样的情景下&#xff0c;人员的缺少&#xff0c;时间的效率等问题&#xff0c;导致很多企业…

图像分类数据集(线性神经网络,需结合从零实现softmax回归一起学习)

文章目录图像分类数据集读取小批量整合所有组件小结图像分类数据集 导入必要的类包。 import torch import torchvision from torch.utils import data #torchvision是pytorch的一个图形库&#xff0c;它服务于PyTorch深度学习框架的&#xff0c;主要用来构建计算机视觉模型。…

Kafka设计原理——副本数据同步机制(watermark 和 leader epoch)

文章目录LEO更新机制follower副本LEO更新leader副本LEO更新HW更新机制follower更新HWleader更新HW使用HW衡量数据同步情况的缺陷LEO更新机制 follower副本LEO更新 Kafka设计了两套follower副本LEO属性&#xff0c;一套LEO值保存在follower副本所在的broker缓存上&#xff1b;…

详解 B2B 用户、组织、员工、角色

整理了一下 toB 多组织系统中常见的实体关系&#xff0c;往往在实际项目中这些基础模块是公司老前辈已经开发完成的&#xff0c;因此新人在此基础上开发一些相关的业务模块很容易被这些模糊不清的关系搞晕。 一、定义 user 用户&#xff0c;操作者的唯一标识&#xff0c;通常…

去中心化时代的创作者经济

所谓创作者经济&#xff0c;具体是指利用各种互联网工具&#xff0c;由个人或团体进行内容创作、分发及一系列与创作者相关服务下产生的经济收益。 这一概念也主要在当前的 web2互联网时代&#xff0c;并且有很多鲜明的案例凸显出了创作者经济的强大潜力&#xff0c;像我们熟知…

SpringCloud-20-Spring Cloud Hystrix客户端服务降级

8.5 客户端服务降级 通常情况下&#xff0c;我们都会在客户端进行服务降级&#xff0c;当客户端调用的服务端的服务不可用时&#xff0c;客户端直接进行服务降级处理&#xff0c;避免其线程被长时间、不必要地占用。沿用microservice-cloud-consumer-dept-openFeign客户端工程…

ConcurrentHashMap简单案例

concurrenthashmap 线程安全集合类 线程安全基本分类 线程安全集合类可以分为三大类&#xff1a; 遗留的线程安全集合如 Hashtable &#xff0c; Vector 使用 Collections 装饰的线程安全集合&#xff0c;如 Collections.synchronizedCollectionCollections.synchronizedLis…

【剑指offer】链表篇-含题目代码思路解析

【剑指offer】链表篇1. JZ6 从尾到头打印链表C注意2. JZ24 反转链表C(双指针法)注意3. JZ25 合并两个排序的链表C注意4. JZ52 两个链表的第一个公共结点C 【错误】C【正确】注意5. JZ23 链表中环的入口结点C注意6. JZ22 链表中倒数最后k个结点C注意7. JZ35 复杂链表的复制8. JZ…

如何实时计算中证1000指数的主买/主卖交易量

主买是指以卖方的报价成交&#xff0c;主卖是指以买方的报价成交。 一般来说&#xff0c;主动买入就是资金流入&#xff0c;主动卖出就是资金流出&#xff0c;所以实时统计主买/主卖交易量能够实时监控资金的流入流出情况。本文基于中证 1000 指数&#xff0c;介绍如何利用 Dol…

BitSet字符个数统计

import java.util.Scanner; import java.util.BitSet; public class Main { public static void main(String[] args) { Scanner scanner new Scanner(System.in); String line scanner.next(); //总共有128个字符。字需要用128位 BitSet bitSet new BitSet(128); for…

微服务应用之OAuth2.0的四种授权方式

引言 OAuth 2.0 是一种授权机制&#xff0c;主要用来颁发令牌&#xff08;token&#xff09;。 OAuth 2.0 的标准是 RFC 6749 文件&#xff0c;这个文件写出&#xff08;由于互联网有多种场景&#xff0c;&#xff09;本标准定义了获得令牌的四种授权方式&#xff08;authoriza…

top命令

【1】top命令 语法格式&#xff1a; top(选项)选项如下&#xff1a; -b&#xff1a;以批处理模式操作&#xff1b; -c&#xff1a;显示完整的治命令&#xff1b; -d&#xff1a;屏幕刷新间隔时间&#xff1b; -I&#xff1a;忽略失效过程&#xff1b; -s&#xff1a;保密模式…

SpringBoot - 集成Quartz框架之常见问题(五)

写在前面 SpringBoot - 集成Quartz框架之CRON表达式 SpringBoot - 集成Quartz框架之Quartz简介(一) SpringBoot - 集成Quartz框架之常用配置(二) SpringBoot - 集成Quartz框架之具体步骤(三) SpringBoot - 集成Quartz框架之独立数据源(四) 1. 什么是失火策略&#xff1f; 场…

React 学习笔记总结(二)

文章目录1. React 之 props的使用2. React 之 对props进行限制3. React 之 props只读 (知道修改在这是什么效果&#xff01;)4. React 之 props简写方式5. 类式组件中的构造器 与 props的注意事项6. 函数式组件 使用props7. 类式组件字符串形式的refs属性8. React 之 回调形式r…