JavaScript学习第2天:JS内置对象、简单数据类型与复杂类型

news2024/11/27 22:31:34

一、内置对象

JavaScript 中的对象分为3种:自定义对象内置对象浏览器对象
前面两种对象是JS 基础内容,属于 ECMAScript; 第三个浏览器对象属于JS 独有的

1、内置对象

内置对象就是指 JS 语言自带的一些对象。
JavaScript 提供了多个内置对象:Math、 Date 、Array、String等

2、Math对象

Math.PI // 圆周率
Math.floor() // 向下取整
Math.ceil() // 向上取整
Math.round() // 四舍五入版 就近取整 注意 -3.5 结果是 -3 
Math.abs() // 绝对值
Math.max()/Math.min() // 求最大和最小值

随机数方法 random()

// 得到一个两数之间的随机整数
function getRandom(min, max) {
 return Math.floor(Math.random() * (max - min + 1)) + min; 
}

3、Date对象

具体用法:格式化时间,时间戳、倒计时详解和setTime()方法

4、Array对象

instanceof 运算符,可以判断一个对象是否属于某种类型
(可以使用 typeof 获取变量的数据类型)

// 1.第一种方法:创建数组
var arr = [1, '2', true];
console.log(typeof arr);  // 结果:Object
console.log(arr instanceof Array);  // 结果:true
console.log(arr instanceof Object);  // 结果:true

// 2.第2种方法:创建数据
var arr2 = new Array();
arr2[0] = 1;
arr2[1] = '2';
arr2[2] = true;
console.log(arr2)  // 结果:[1, '2', true]

// 简写
var arr2 = new Array(1, '2', true)

Array.isArray()用于判断一个对象是否为数组,isArray() 是 HTML5 中提供的方法
《1》添加删除数组元素

方法名说明返回值
push(参数1…)末尾添加1个或多个元素,修改原数组返回新的长度
pop()删除数组最后一个元素,无参数,修改原数组返回删除的元素的值
unshift(参数1…)数组开头添加一个或多个元素,修改原数组返回新的长度
shift()删除数组的第一个元素,无参数,修改原数组返回删除的元素的值

《2》数组排序

方法名说明是否修改原数组
reverse颠倒数组中元素的顺序,无参数修改原数组,返回新数组
sort对数组的元素进行排序修改原数组,返回新数组
var arr = [1, 64, 9, 6];
arr.sort(function(a, b) {
 return b - a; // 降a序
 // return a - b; // 升序
});
console.log(arr)

《3》数组索引

方法名说明返回值
indexOf()查找给定元素的第一个索引如果存在,返回索引号;如果不存在,返回-1
lastIndexOf()查找给定元素在数组中的最后一个索引果存在,返回索引号;如果不存在,返回-1

《4》数组转化为字符串

方法名说明返回值
toString()把数组转化成字符串,逗号分割每一项返回一个字符串
join(‘分隔符’)把数组中的所有元素转为一个字符串返回一个字符串

《5》数组操作方法

方法名说明返回值
concat()连接2个或多个数组,不影响原数组返回一个新数组
slice()数组截取slice(begin,end),不影响原数组返回被截取的片段
splice()数组删除splice(第几个开始,要删除的个数),影响原数组返回被删除的片段

详细讲解:split()、splice()、slice()、join()函数

slice() 和 splice() 目的基本相同

5、字符串对象

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

var str = 'andy';
console.log(str.length);  // 结果是4,为什么基本数据类型也有length属性?

// 基本包装类型其执行过程
// 1. 生成临时变量,把简单类型包装为复杂数据类型
var temp = new String('andy');
// 2. 赋值给我们声明的字符变量
str = temp;
// 3. 销毁临时变量
temp = null;

《2》字符串的不可变
字符串的不可变指的是里面的值不可变,虽然看上去可以改变内容,但其实是指向地址变了,内存中新开辟了一个内存空间。
因为字符串的不可变,所以不要大量的重新赋值/拼接字符串
《3》根据字符串返回位置

方法名说明
indexOf(‘要查找的字符串’,开始的位置)返回元素在字符串中的索引值,如果找不到返回-1
lastIndexOf()从后往前找,只找第一个匹配的,返回索引值
// 小案例:查找字符串"abcoefoxyozzopp"中所有o出现的位置以及次数

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

《4》根据位置返回字符串(重点)

方法名说明使用
charAt(index)返回指定位置的字符str.charAt(0)
charCodeAt(index)获取指定位置字符的ASCII码str.charCodeAt(0)
str[index]获取指定位置字符HTML5,IE8+支持,和charAt()等效
// 小案例:判断一个字符串 'abcoefoxyozzopp' 中出现次数最多的字符,并统计其次数。

 var str = "abcoefoxyozzopp";
    var newStr = {};
    for (var i = 0; i < str.length; i++) {
      var chars = str.charAt(i); // a
      if (newStr[chars]) {
        // 得到属性值
        newStr[chars]++;
      } else {
        newStr[chars] = 1;
      }
    }
    var max = 0;
    var ch = "";
    for (var k in newStr) {
      if (newStr[k] > max) {
        max = newStr[k];
        ch = k;
      }
    }
    console.log(max);
    console.log("最多的字符是" + ch);

《5》字符串操作方法(重点)

方法名说明返回值
concat(str1,str2)连接两个或多个字符串,不影响原字符串返回一个新值
substr(start,length)截取字符串,不影响原字符串返回截取的片段
slice(start,end)截取字符串,end取不到(索引号)返回截取的片段
substring(start,end)基本和slice相同,但是不接受负值返回截取的片段

《6》split()方法
切割字符串,将字符串切分为数组,返回一个数组。

var str = 'a,b,c,d';
console.log(str.split(',')); // 返回的是一个数组 [a, b, c, d]

《7》replace()方法
在字符串中用一些字符替换另一些字符

var str1 = "abcda";
var a = str1.replace("a", 5);
console.log(a); // 结果:5bcda

var str2 = "abcdaabcd";
var a = str2.replace(/abc/, 5);
console.log(a); // 结果:5daabcd

《8》转变大小写

UpperCase() //转换大写
toLowerCase() //转换小写

二、简单类型与复杂类型

1、区分简单与复杂类型

简单类型又叫做基本数据类型或者值类型,复杂类型又叫做引用类型
简单类型:在存储时变量中存储的是值本身(string ,number,boolean,undefined,null是简单类型)
复杂类型:在存储时变量中存储的仅仅是地址(通过new关键字创建的对象(系统对象、自定义对象),如Object、Array、Date等都是复杂类型)

2、堆和栈

栈(操作系统):由操作系统自动分配释放存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈;

堆(操作系统):存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收。
复杂数据类型存放到堆里面

注意:JavaScript中没有堆栈的概念,通过堆栈的方式,可以更容易理解代码的一些执行方式,也便于将来学习其他语言。

3、内存分配

简单类型变量直接存在在栈空间中
在这里插入图片描述

复杂类型变量栈空间里存放的是地址,真正的对象实例存放在堆空间中
在这里插入图片描述

4、传参

函数的形参也可以看做是一个变量
《1》简单类型传参
值类型变量作为参数传给函数时,是把变量在栈空间的值赋值了一份给形参,所以在方法内部对形参做任何修改,都不会影响到外部变量

function fn(a) {
 a++;
 console.log(a);   // 结果:11
}
var x = 10;
fn(x);
console.log(x)  // 结果:10

《2》复杂类型传参
引用类型变量作为参数传给形参时,是把变量在栈空间保存的地址复制给了形参,形参和实参其实保存的是同一个栈地址,所以操作的是同一个对象

function Person(name) {
 this.name = name;
}
function f1(x) { // x = p
 console.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. 结果:张学友

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于java8的List的stream流的foreach()方法问题探究(坑)与替代方案

一、起因 今天发现线上系统出现了一个bug&#xff0c; 我有一个“定时任务”每天凌晨触发&#xff0c;任务内容&#xff1a; ① 定时调用的系统暴漏的接口&#xff0c;来定时获取List<Object>数据。 ② 然后我会筛选出该List中符合条件的Object&#xff0c;对筛选出来的…

数组类模板

要求&#xff1a;设计一个数组模板类&#xff08;MyArray&#xff09;&#xff0c;完成对不同类型元素的管理操作步骤设计头文件在 qtcreate下先创建03_code的项目&#xff0c;然后右键点击03_code添加新文件&#xff0c;点击头文件&#xff0c;点击Choose命名为 myarry.hpp&am…

产品运营︱用户活跃度低的解决方法

app用户活跃度低&#xff0c;产品拉新变现效率慢&#xff0c;这是运营app时难免会遇到的情况。要想解决这类问题&#xff0c;就要从可能的原因下手&#xff0c;进行产品的优化改进&#xff0c;记录下改变后的关键数据变化&#xff0c;定期做好复盘工作进行调整。 一、app用户量…

117.Android 简单的拖拽列表+防止越界拖动(BaseRecyclerViewAdapterHelper)

//1.第一步 导入依赖库和权限&#xff1a; //依赖库&#xff1a; //RecyclerView implementation com.android.support:recyclerview-v7:28.0.0//RecyclerAdapter implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.28 //用到的权限&#xff1a; <!…

【华为OD机试模拟题】用 C++ 实现 - 求最大数字

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

优思学院:六西格玛管理的优势有哪些?

六西格玛的优势有哪些呢&#xff1f;以下我们来探讨一下。 一・降低企业整体成本 对企业而言&#xff0c;不良品要么被废弃&#xff0c;要么需要重新加工&#xff0c;或者需要在客户现场维修或更换&#xff0c;这些都会增加企业成本。根据美国的统计数据&#xff0c;执行3σ管…

搭建Scala集成开发环境

文章目录前言搭建Scala集成开发环境&#xff08;一&#xff09;启动IDEA&#xff08;二&#xff09;安装Scala插件&#xff08;四&#xff09;创建Scala项目1、创建Scala项目 - ScalaDemo012、创建Scala类 - HelloWorld3、创建Scala单例对象 - TestHelloWorld&#xff08;五&am…

HIVE 基础(四)

目录 分桶&#xff08;Bucket&#xff09; 设定属性 定义分桶 案例 建表语句 表数据 上传到数据 创建分桶语句 加载数据 分桶抽样&#xff08;Sampling&#xff09; 随机抽样---整行数据 随机抽样---指定列 随机抽样---百分比 随机抽样---抽取行数 Hive视图&#…

计算机基础知识——认识寄存器

下面我们就来介绍一下关于寄存器的相关内容。我们知道&#xff0c;寄存器是 CPU 内部的构造&#xff0c;它主要用于信息的存储。除此之外&#xff0c;CPU 内部还有运算器&#xff0c;负责处理数据&#xff1b;控制器控制其他组件&#xff1b;外部总线连接 CPU 和各种部件&#…

【软件测试】自动化测试的科幻大片,揭开面纱的后背......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 只要一听到 “自动化…

Solon v2.1.4 发布。支持 java、kotlin、groovy!

本次发布&#xff0c;重点测试和验证了在 java、kotlin、groovy 三种 jvm 语言里&#xff0c;开箱即用的特性。并发布 Solon Initializr&#xff1a; https://solon.noear.org/start/ &#xff08;也即将发布 idea 插件&#xff09; 最近&#xff0c;与小诺开源团队合作发布了…

JS中如何将一个普通对象转换为可迭代对象,并且可使用for...of迭代对象,内含手写一个简单的迭代器

文章目录一、认识迭代器二、为类数组添加迭代器方法三、为colorObj对象添加迭代器方法四、优化colorObj代码五、ES6内置迭代对象方法这里有一个普通对象&#xff1a; const colorObj {white: "小白",black: "小黑",gray: "小灰", }如何对 colo…

hyper-v安装koolshare软路由

注意 windows更改适配器配置&#xff0c;为hostonly适配器配置两个IP hyper-v虚拟机内存设置为2G&#xff08;windows pe启动需要&#xff09; hyper-v虚拟机配置网络》选择hostonly网络 以管理员身份运行IMG写盘工具 BIOS从IDE启动 去掉DVD驱动器 添加硬件》网络适配器》wan网…

华为机试题:HJ84 统计大写字母个数(python)

文章目录&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;Python3实现&#xff08;3&#xff09;知识点详解1、input()&#xff1a;获取控制台&#xff08;任意形式&#xff09;的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…

10 种主数据模型设计示例分享,推荐收藏

主数据模型是主数据管理的基础&#xff0c;一个完整的、可扩展的、相对稳定的主数据模型对于主数据管理的成功起着重要的作用。规划、创建主数据模型的过程&#xff0c;是梳理主数据管理体系的过程&#xff0c;目的是建立一个良好的资源目录结构&#xff0c;划分合理的资源粒度…

网关的通用设计框架

概念 网关&#xff0c;很多地方将网关比如成门&#xff0c; 没什么问题&#xff0c; 但是需要区分网关与网桥的区别。 网桥:工作在数据链路层&#xff0c;在不同或相同类型的LAN之间存储并转发数据帧&#xff0c;必要时进行链路层上的协议转换。可连接两个或多个网络&#xf…

从0到1一步一步玩转openEuler--22 管理服务-关闭、暂停、休眠系统服务

文章目录22 管理服务-关闭、暂停、休眠系统服务22.1 systemctl命令22.2 关闭系统22.3 重启系统22.4 使系统待机22.5 使系统休眠22 管理服务-关闭、暂停、休眠系统服务 22.1 systemctl命令 systemd通过systemctl命令可以对系统进行关机、重启、休眠等一系列操作。当前仍兼容部…

WSO2 apim 多租户来区分api

WSO2 apim 多租户来区分api1. Tenant1.1 Add new tenant1.2 Add Role/User1.3 Published Api2. Delete Teant3. AwakeningWSO2安装使用的全过程详解: https://blog.csdn.net/weixin_43916074/article/details/127987099. Official Document: Managing Tenants. 1. Tenant 1.1 …

电脑常用知识与工作常用工具

什么是电脑快捷键&#xff1f; 所谓快捷键就是使用键盘上某一个或某几个键的组合完成一条功能命令&#xff0c;从而达到提高操作速度的目的。 键盘布局 主键盘区&#xff0c;数字辅助键盘区、F键功能键盘区、控制键区&#xff0c;对于多功能键盘还增添了快捷键区 一、常用快捷…

多线程Thread常用方法和状态

Thread类 及常见方法 1、常见构造方法 方法说明Thread()创建线程对象Thread(Runnable target)使用 Runnable 对象创建线程对象Thread(String name)创建线程对象&#xff0c;并命名Thread(Runnable target, String name)使用 Runnable 对象创建线程对象&#xff0c;并命名Thre…