JavaScript-3(内置对象+数组对象+字符串对象)

目录

1.预解析

2.对象

什么是对象

创建对象的三种方法

利用字面量创建方法

利用new Object创建对象

构造函数创建对象

new关键字

遍历对象

3.内置对象

Math对象

Math概述

Math随机数

Date日期对象

格式化日期

Date总的时间毫秒

4.数组对象

创建数组的两种方式

数组的一些方法

检测是否为数组

添加数组元素

删除数组元素

数组排序

获取数组元素索引

数组转换为字符串和分隔符

5.字符串对象

基本包装类型

字符串的不可变性

字符串中元素的查找

根据位置返回字符

字符串的操作方法

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

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

堆和栈


1.预解析

js引擎运行js分为两步:预解析、代码执行

  • 预解析,js引擎会把js里面所有的var还有function提升到当前作用域的最前面
  • 代码执行,按照预解析形成的代码顺序进行执行

预解析分为变量预解析(变量提升)和函数预解析(函数提升)

  • 变量提升 把所有的变量声明提升到当前的作用域前面,但是不提升赋值操作
  • 函数提升 把所有的函数声明提升到当前作用域的最前面,但是不调用函数

在函数的作用域中也要考虑变量提前和函数提前

给几个变量同时声明且赋值相同,正确写法:var a=9,b=9,c=9;

只在局部作用域内声明并赋值的属于局部变量,在全局作用域中不能调用

2.对象

什么是对象

在js中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等

对象由属性和方法组成

创建对象的三种方法

利用字面量创建方法

创建对象:使用键值对的格式;多个属性或方法之间用逗号隔开;方法冒号后面跟的是一个匿名函数

调用对象:

  • 调用属性    对象.属性值     console.log(star.name);
  • 调用属性    对象['属性值']     console.log(star['name']);
  • 调用方法    对象.方法名()    star.sayHi()                

调用方法时,后面一定要加上小括号

变量和属性的相同点和不同点:

  • 相同点:都是用来储存数据的
  • 不同点:变量必须声明var,使用的时候直接写变量名;而属性写在对象内不需要声明,使用的时候必须是 对象.属性

函数和方法的相同点和不同点:

  • 相同点:都是实现某种功能,做某件事
  • 不同点:函数是单独声明的,调用的时候用的是 函数名(),是单独存在的;而方法使用在对象内的,调用的时候 对象.方法()

利用new Object创建对象

var obj=new Object();

obj.name="q";

obj.age="1";

console.log(obj.name);

console.log(obj['age']);

创建了一个新对象,中间采用=赋值的方法,添加对象的属性和方法;每个属性和方法之间用分号结束

构造函数创建对象

将一些相同的属性封装在一起

  • 构造时函数名首字母要大写
  • 构造函数时不需要return就可以返回结果
  • 调用构造函数时必须使用new
  • 根据var 对象名 =new 函数名(属性值)
  • 在构造函数时,函数体内的属性和方法一定要添加this

构造函数时,函数名后面的小括号内要写上有哪些属性,即形参;在使用this时注意等号两边的内容;调用时需要使用到var并new出一个对象,此时函数名后面的小括号内要写上具体属性值,即实参;调用属性时,console.log(对象名.属性)输出,如果是调用函数中的方法,直接对象名.方法名(具体值)

构造函数和对象

构造函数是把对象所有的公共部分封装到了一起;创建对象是特指某一个,通过new关键字创建对象的过程称为对象实例化

new关键字

  • 先在内存中创建一个新的空对象
  • 让this指向这个新的空对象
  • 执行构造函数里面的代码,给这个新对象添加属性和方法
  • 返回这个新对象(构造函数中不需要return)

遍历对象

利用for循环for(var k in obj){} for in 里面的变量习惯上使用k或者key;输出时写obj[k],输出的是具体的属性值,只写一个k,输出的是属性名

3.内置对象

Math对象

Math概述

Math数学方法不是一个构造函数,不需要再去用new调用

Math.max(1,70,'pink老师') 返回的值是NaN;Math.max()返回的值是-Infinity负的无穷大

设置函数myMath,里面有方法max和min,arguments可以用来接收用户输入的所用实参,判断最大值和最小值,先定义一个变量为数组中的索引0,拿索引0去和数组中的数一个一个进行比较

想输入实参console.log(myMath.max(1,3,9))

Math.floor()   向下取整,直接舍去小数点后面的数字 ; Math.cell()   向上取整,直接进1;    Math.round()   四舍五入,但是.5比较特殊,它是往大的方向进,所以-1.5用该方法后变为-1  Math.abs()   求绝对值

Math随机数

Math.random() 随机产生0~1之间的数字

想要随机产生两个数之间的数字(包含这两个数),把random方法封装到一个函数中去,函数设置形参最大值和最小值

return Math.floor(Math.random()*(max-min+1))+min;

在进行随机点名时,可以定义一个数组,再去巧妙地调用函数

console.log(arr[getRandom(0,arr.length-1)])

猜数字游戏

进行while死循环时,在最后结果相同结束循环的时候,要用break,结束本轮循环;要设置限制次数,用for循环

Date日期对象

它是一个构造函数,必须通过new来调用

不写参数,输出的时当前的时间;

写参数  数字型 2019,10,01 返回的月份会大一月    字符串型 ‘2019-10-01’刚刚好

格式化日期

返回的月比实际的月份小一月,所以后面要加上1;

获取星期时,星期日返回的是0

在使用下面的格式化方法时,一定要先new来调用var date=new Date()

想要获得汉字星期,可以把星期放置在一个数组中,星期日放在第一个,通过getDay返回的数字作为数组的索引,输出汉字星期

var arr=['星期日',‘星期一’,‘星期二’,‘星期三’,‘星期四’,‘星期五’,‘星期六’]

var day=date.getDay();

arr[day]

可以用三元运算符生成06、07那种好看的排版

h = h < 10 ? '0' + h : h

Date总的时间毫秒

从1970年开始算起

var date =new Date();  console.log(date.valueOf());  console.log(date.getTime());  .log(变量名)也可

var date1 = +new Date();     console.log(date1);

console.log(Date.now());

倒计时

利用时间戳,先得出现在的时间毫秒,再得到用户输入的截止时间的毫秒,用截止时间的毫秒减去现在时间的毫秒,所得即为差值,先将差值除以1000得到秒,再进行后面的转换

计算天数:d=parseInt(总秒数/60/60/24)

计算小时:h=parseInt(总秒数/60/60%24)

计算分钟:m=paresInt(总秒数/60%60)

计算当前秒数:s=paresInt(总秒数%60)

在代码中可利用三元运算符,在得出的结果小于10时,在前面添加一个0;最后在函数的代码体中记得要有返回值

在调用时,用字符串的方式写时间

4.数组对象

创建数组的两种方式

在数组中放置元素:

var arr=[];   //创建了一个空的数组

var arr1=new Array(2);   //不代表把2放进了数组中,代表数组长度为2,有2个空字符

var arr2=new Array(2,3)  //把2,3放进了数组

数组的一些方法

检测是否为数组

方法一:isinstanceof 

console.log(arr instanceof Array);

console.log(obj instanceof Array);

方法二:Array.isArray

console.log(Array.isArray(参数))

Array.isArray优先级高于isinstanceof

添加数组元素

push(参数)  在数组末尾添加一个或者多个数组元素;push完毕后返回的结果是新数组的长度,就是直接写console.log(arr.push(4,'pink')),输出的结果是新数组的长度;直接写console.log(arr),输出的结果就是新数组

unshift(参数)  在数组前面添加一个或者多个元素;其原理同上

删除数组元素

pop() 括号中不用写东西,删除的是数组中的最后一个元素;直接写console.log(arr.pop())返回的结果是被删除的元素值;直接写console.log(arr),输出的结果才是新的数组

shift() 括号中不写东西,删除的是数组中的第一个元素;原理同上

筛选数组

在将老数组中的元素添加到新数组中,可以利用push方法来添加新元素

数组排序

翻转数组: arr.reverse()

冒泡排序: arr.sort(function(a,b)){}      在方法体中写return a-b 返回的是正序排列, return b-a返回的是倒序排列;加了方法体后的sort方法可以来排列两位数以上的数字,更完整

获取数组元素索引

indexOf(数组元素)  返回该元素在此数组中的索引位置,从前面开始查找

lastIndexOf(数组元素)  返回该元素在此数组中的索引位置,从后面开始查找

如果查找元素在数组中不存在,那么返回值是-1,其它情况下不会出现负值

数组去重案例

数组转换为字符串和分隔符

toString()数组转换成字符串

join(符号)  在字符串中插入符号连接

5.字符串对象

基本包装类型

基本包装类型就是把简单数据类型包装为复杂数据类型,这样基本数据类型就有了属性和方法(按道理基本数据类型是没有属性和方法的,而对象才有属性和方法)

包装过程中,会用到一个临时变量,最后把临时变量赋值为空,完成包装

字符串的不可变性

尽管新赋值给一个已经定义好的字符串变量,输出结果是新的值,但是占用了两个地方的内存;所以,尽可能地不用字符串的拼接,减少内存

字符串中元素的查找

在str.indexOf()中写过要搜索的字符后,可以再写上具体的数字,让其从该位置查找

查找在字符串中多次出现的字符位置

根据位置返回字符

str.charAt(index)   根据相应位置返回字符

str.charCodeAt(index)  获取指定位置处的ASCII码(index索引号)

str[index]  获取指定位置处的字符

统计出现最多的字符

判断对象中是否含有某属性   对象[属性名]

k为属性名,o[k]为属性值

字符串的操作方法

str1.concat(str2)   字符串的连接,作用和+一样

str1.substr(index,length)    截取,第一个位置是所截字符串的起始位置,第二位置是所截字符串的长度

str.replace('a','b')  替换字符,只能换掉第一次出现的字符;可以通过indexOf判断该字符一直存在,来一直替换

str.split('字符串的分隔符')   把数组转换成字符串,括号中写的是数组中的间隔符号;而join是分隔符

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

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

简单类型又叫基本数据类型或者值类型,复杂类型又叫做引用类型

简单数据类型:存储变量时存储的是值本身,

引用数据类型:通过new关键字创建的对象

堆和栈

简单数据类型存放到栈里面;复杂数据类型存放到堆里面

引用数据类型较为复杂,栈空间中存放的是地址,真正的实例对象存放在堆空间中

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

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

相关文章

进销存单机版和excel进销存那个好用

进销存单机版和EXCEL进销存哪个好用&#xff1f;单机版是安装在单台电脑上使用的&#xff0c;它不能像网络版一样可以多台电脑同时共享数据&#xff0c;所以进销存单机版有一个优势就是不需要连接网络也可以使用。 进销存单机版 进销存软件单机版是经过开发人员设计好的一种信…

网页提示语闪太快的定位问题(selenium)

selenium UI自动化时&#xff0c;提示语闪太快&#xff0c;导致无法获取元素的问题 解决办法 步骤一&#xff1a; F12---》控制台输入debugger 步骤二&#xff1a;对于需要定位的部分&#xff0c;在控制台的debugger处回车&#xff0c;可以定住页面 步骤三&#xff1a;正常定…

生成式AI原理技术详解(一)——神经网络与深度学习

本文主要介绍了生成式AI的最新发展&#xff0c;提到了GPT-5和AI软件工程师在行业中的影响&#xff0c;指出AI技术进步对国家竞争和个人职业发展的潜在影响。 未来已来 最近有两则新闻&#xff1a; sam altman自曝GPT-5细节&#xff0c;公开宣称GPT-5提升将非常大&#xff0c;任…

62、回溯-N皇后

思路&#xff1a; N皇后问题要求在一个nn的棋盘上放置n个皇后&#xff0c;使得它们不能相互攻击。皇后可以攻击同一行、同一列&#xff0c;以及两个对角线方向上的其他皇后。解决这个问题意味着找到所有可能的棋盘配置&#xff0c;每个配置都符合上述条件。 1、初始化数据结构…

Docker 入门篇(二)-- Linux 环境离线安装

引言 docker 系列文章&#xff1a; Docker 入门篇&#xff08;一&#xff09;-- 简介与安装教程&#xff08;Windows和Linux&#xff09; 一、安装环境准备 centos &#xff1a;CentOS Linux release 7.6.1810 (Core)docker 版本&#xff1a;docker-26.1.0.tgz 官网下载地址…

Linux驱动开发——(七)Linux阻塞和非阻塞IO

目录 一、阻塞和非阻塞IO简介 二、等待队列 2.1 等待队列头 2.2 等待队列项 2.3 将队列项添加/移除等待队列头 2.4 等待唤醒 2.5 等待事件 三、轮询 四、驱动代码 4.1 阻塞IO 4.2 非阻塞IO 一、阻塞和非阻塞IO简介 IO指的是Input/Output&#xff0c;也就是输入/输…

十个案例学习Flume

在上一篇文章中&#xff0c;已经知道了Flume的架构、概述、与安装&#xff0c;现在我们来用十个案例去学习flume的使用。 在使用之前&#xff0c;提供一个大致思想&#xff0c;使用Flume的过程是确定scource类型&#xff0c;channel类型和sink类型&#xff0c;编写conf文件并开…

零基础HTML教程(30)--迈入HTML5新时代

文章目录 1. 从H4时代到H5时代2. 属性值可以不用引号3. 标签使用大小写均可4. 部分属性值可以省略5. 浏览器支持情况6. 小结 1. 从H4时代到H5时代 之前讲的29篇HTML教程&#xff0c;内容基本都是H4时代就有的。 随着时代的发展&#xff0c;H4多少有点不够用&#xff0c;所以H…

Kotlin基础​​

数据类型 定义变量 var表示定义变量&#xff0c;可以自动推导变量类型&#xff0c;所以Int可以不用写。 定义常量 条件语句 if表达式可以返回值&#xff0c;该值一般写在if里的最后一行 类似switch的用法 区间 循环 a是标签&#xff0c;可以直接break到标签的位置&#xf…

【八大排序(二)】选择排序与堆排序

❣博主主页: 33的博客❣ ▶️文章专栏分类:八大排序◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多排序知识 目录 1.前言2.选择排序2.1基本思想2.2画图理解2.3单向选择排序代码实现2.4双向选择排序代码…

从零入门区块链和比特币(第一期)

欢迎来到我的区块链与比特币入门指南&#xff01;如果你对区块链和比特币感兴趣&#xff0c;但不知道从何开始&#xff0c;那么你来对地方了。本博客将为你提供一个简明扼要的介绍&#xff0c;帮助你了解这个领域的基础知识&#xff0c;并引导你进一步探索这个激动人心的领域。…

swagger xss漏洞复现

swagger xss漏洞复现 文章目录 swagger xss漏洞复现漏洞介绍影响版本实现原理漏洞复现修复建议: 漏洞介绍 Swagger UI 有一个有趣的功能&#xff0c;允许您提供 API 规范的 URL - 一个 yaml 或 json 文件&#xff0c;将被获取并显示给用户 根本原因非常简单 - 一个过时的库Dom…

预见预判|AIRIOT智慧交通管理解决方案

随着机动车保有量的逐步增加&#xff0c;城市交通压力日益增大。同时&#xff0c;新能源车辆的快速发展虽然带来了环保效益&#xff0c;但也因不限号政策而进一步加剧了道路拥堵问题。此外&#xff0c;各类赛事和重大活动的交通管制措施也时常导致交通状况复杂多变。面对这些挑…

Java 基础常见面试题整理

目录 1、java的基本数据类型有哪些&#xff1f;2、java为什么要有包装类型&#xff1f;3、String a "123" 和 String a new String("123") 区别&#xff1f;4、String、StringBuilder和StringBuffer的区别&#xff1f;5、如何理解面向对象和面向过程&…

MySQL常见问题与解决方案详述

MySQL&#xff1a;常见问题与解决方案详述 作为一款广泛使用的开源关系型数据库管理系统&#xff0c;MySQL对于初学者来说既充满吸引力又充满挑战。本文将列举初学者在使用MySQL过程中可能遇到的一些典型问题&#xff0c;并提供详细的解决方案&#xff0c;配以图片辅助说明&am…

修改后门ctime | Linux 后门系列

0x00 前情提要 在 alias 后门 &#xff5c; Linux 后门系列一文中&#xff0c;我们为了让后门完美一些&#xff0c;修改了后门文件的 atime、mtime&#xff0c;但是 ctime 一直没有办法修改&#xff0c;今天我们来把这一块补齐&#xff0c;让后门更加完美 atime -> access t…

Chrome 网络调试程序 谷歌网络调试 network

目录 1.网络面板总览2.概况了解3.Waterfall接口排队等待时间4.关注请求接口的Size,可能是占据内存溢出的接口5.过滤器一栏 fetch/xhr 什么意思6. Stalled 什么意思7.Queueing 什么意思8.Queueing和Stalled之间什么关系9.为什么会有阻塞状态10.Time列是pending 什么意思 1.网络面…

Vue入门篇:生命周期,钩子函数,工程化开发Vue(脚手架安装),组件化开发(全局注册,局部注册)

目录 1.Vue生命周期和生命周期的四个阶段2.Vue生命周期函数&#xff08;钩子函数)3.工程化开发&脚手架Vue CLI1.在powershell管理员权限下打开命令行安装脚手架&#xff1a;2.查看vue版本&#xff1a;3.创建项目架子4.运行项目 4.组件化开发&根组件1.App.vue文件&#…

解决双击PDF文件出现打印的问题【Adobe DC】

问题描述 电脑安装Adobe Acrobat DC之后&#xff0c;双击PDF文件就会出现打印&#xff0c;而无法直接打开。 右键PDF文件就会发现&#xff0c;第一栏出现的不是用Adobe打开&#xff0c;而是打印。 重装软件多次仍然无法解决。 原因 右键菜单被改写了。双击其实是执行右键菜…

计算机网络—— book

文章目录 一、概述1.1互联网的核心部分1&#xff0e;电路交换的主要特点2&#xff0e;分组交换的主要特点 1.2.计算机网络的性能1&#xff0e;速率2&#xff0e;带宽3&#xff0e;吞吐量4&#xff0e;时延5&#xff0e;利用率 1.3.计算机网络体系结构协议与划分层次具有五层协议…