JavaScript初级——对象和函数

news2024/9/27 5:58:07

一、对象的简介

    1、JS中的数据类型

—— String  字符串

—— Number  数值

—— Boolean  布尔值

—— Null  空值

—— Undefined  未定义

——以上五种类型属于基本数据类型,以后我们看到的值只要不是上面这五种,则为对象

—— Object  对象

    2、基本数据类型都是单一的值,如:“hello”、123、true ··· ···  值和值之间没有任何的联系

    3、对象属于一种复合的数据类型,在对象中可以保存多个不同数据类型的属性

    4、对象的分类:

(1)内建对象

—— 由ES变准中定义的对象,在任何的ES的实现中都可以使用

比如:Math   String  Number  Boolean   Function   Object ···· ····

(2)宿主对象

—— 由JS的运行环境提供的对象,目前来讲主要指由浏览器提供的对象

比如:BOM    DOM

(3)自定义对象

—— 由开发人员自己创建的对象

    5、创建对象

(1)使用 new 关键字调用的函数,是构造函数 constructor

(2)构造函数是专门用来创建对象的函数

(3)使用 typeof 检查一个对象时,会返回 object

    6、读取对象中的属性

语法: 对象 . 属性名

如果读取对象中没有的属性,不会报错而是会返回 Undefined

    7、修改对象的属性值

语法: 对象 . 属性名 = 新值

    8、删除对象中的属性

语法: delete 对象 .  属性名

二、属性值和属性名

    1、属性名

① 对象的属性名不强制要求遵守标识符的规范,什么乱七八糟的名字都可以使用,但是我们使用还是按照标识符的规范去做

② 如果需要使用特殊的属性名,不能采用 . 的方式来操作,需要使用另一种方式:

语法:   对象[ “属性名” ] = 属性值

读取时也要采用这种方式

使用 [ ] 这种形式去操作属性,更加灵活,在 [ ] 中可以直接传递一个变量,这样变量值是多少就会读取那个属性

    2、属性值

① JS 对象的属性值,可以是任意的数据类型,甚至可以是一个对象。

②  in  运算符

—— 通过该运算符可以检查一个对象中是否含有指定的属性,如果有则返回 true ,没有则返回 false

—— 语法:  “属性名”  in  对象

三、基本数据类型和引用数据类型

    1、基本数据类型:String    Number   Boolean   Null   Undefined

    2、引用数据类型:Object

    3、JS中的变量都是保存到栈内存中的

—— 基本数据类型的值直接在栈内存中存储,值与值之间是独立存在的,修改一个变量不会影响其他变量。

—— 对象时保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟出一个新的空间,而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,当一个通过一个变量修改属性时,另一个也会受到影响。

    4、当比较两个基本数据类型的值时, 就是比较值;而比较两个引用数据类型时,就是比较对象的内存地址,如果两个对象时一模一样的,但是地址不同,他也会返回 false 。

四、对象字面量

    1、使用对象字面量来创建一个对象

    2、使用对象字面量,可以再创建对象时,直接指定对象中的属性

语法: { 属性名:属性值,属性名:属性值··· ··· }

    3、对象字面量的属性名可以加引号也可以不加,建议不加,吐过要使用一些特殊的名字,则必须加引号。

    4、属性名和属性值是一组一组的名值对结构,名和值之间使用 : 连接,多个名值之间使用 , 隔开。吐过一个属性之后没有其他属性了,就不要写,

   

五、函数 function

    1、函数也是一个对象。

    2、函数中可以封装一些功能(代码),在需要时可以执行这些功能(代码)。

    3、函数中可以保存一些代码在需要的时候调用。

    4、函数中 typeof 检查一个函数对象时,会返回 function

    5、可以将要封装的代码以字符串的形式传递给构造函数

    6、封装到函数中的代码不会立即执行,函数中的代码会在函数调用时执行

    7、调用函数  语法 :

函数对象();

    8、当调用函数时,函数中封装的代码会按照顺序执行

    9、我们在执行开发中很少使用构造函数来创建一个函数对象。

    10、使用 函数声明 来创建一个函数

语法:

function    函数名(形参1,形参2,·······){

语句······

}

形参可有可无

    11、使用  函数表达式  来创建一个函数

语法:

var  函数名 = function (形参1,形参2,形参3,······){

语句······

}

形参可有可无

六、函数的参数

    1、可以在函数的()中来指定一个或多个形参(形式参数),多个形参之间使用,隔开,声明形参就相当于在函数内部声明了对应的变量,但是并不赋值。

    2、在调用函数时,可以在()中指定实参(实际参数),实参将会赋值给函数中对应的形参。

    3、调用函数时解析器不会检查实参的类型,所以要注意,是否有可能会接受到非法的参数,如果有可能则需要对参数进行类型的检查。函数的实参可以是任意的数据类型。

    4、调用函数时,解析器也不会检查实参的数量,多余的实参不会被赋值。如果实参的数量少于形参的数量,则没有对应实参的形参是undefined。

七、函数的返回值

    1、可以使用 return 来设置函数的返回值

语法:

return  值;

    2、 return 后的值将会作为函数的执行结果返回。可以定义一个变量来接收该结果。

    3、变量 return 的值就是函数的执行结果,函数返回什么 return 的值就是什么。

    4、 在函数中 return 后的语句都不会执行。

    5、如果 return 语句后不跟任何值就相当于返回一个 undefined,如果函数中不写 return,则也会返回 undefined。

    6、 return 后可以跟任意类型的值。

八、实参可以是任意值

    1、实参可以是一个对象,也可以是一个函数。

九、返回值的类型

    1、使用 return 可以结束整个函数。

    2、返回值可以是任意的数据类型。也可以是一个对象,可以是一个函数。

十、立即执行函数

    1、函数定义完,立即被调用,这种函数叫做立即执行函数。

    2、立即执行函数往往只会执行一次。

十一、对象的补充——方法

    1、对象的属性值可以是任何的数据类型,也可以是函数。

    2、函数也可以称为对象的属性,如果一个函数作为一个对象的属性保存,那么我么称这个函数是这个对象的方法(method。但是他只是名称上的区别,没有其他区别。

十二、枚举对象中的属性

使用   for  ···  in  语句

语法:

for(var 变量  in  对象){

}

  • for  ···  in  语句  对象中有几个属性,循环体就会执行几次,每次执行时,会将对象中的一个属性名字赋值给变量。

十三、全局作用域(Scope)

    1、作用域指一个变量的作用范围。

    2、在JS中一共有两种作用域:全局作用域函数作用域

    3、全局作用域

(1)直接编写在 script 标签中的JS代码,都在全局作用域

(2)全局作用域在页面打开时创建,在页面关闭时销毁

(3)在全局作用域中有一个全局对象 window ,它代表的是一个浏览器的窗口,有浏览器创建,我们可以直接使用。

(4)在全局作用域中:

创建的变量都会作为 window 对象的属性保存

创建的函数都会作为 window 对象的方法保存

(5)变量的声明提前

① 使用 var 关键字声明的变量,会在所有代码执行之前被声明(但是不会被赋值)

② 如果声明变量时不是用 var 关键字,则变量不会被声明提前

(6)函数的声明提前

—— 使用函数声明形式创建的函数 function  函数名(){ }  ,他会在所有代码执行之前被创建,所以我们可以在函数声明前来调用函数

—— 使用函数表达式创建的函数,不会被声明提前,所以不能在声明前调用

(7)全局作用域中的变量都是全局变量,在页面的任意部分都可以访问到。

    4、函数作用域

(1)调用函数时创建函数作用域,函数执行完毕后,函数作用域销毁

(2)每调用一次函数就会创建一个新的函数作用域,他们之间是相互独立的

(3)在函数作用域中可以访问到全局作用域的变量,在全局作用域中无法访问到函数作用域的变量

(4)当在函数作用域操作一个变量时,他会先在自身作用域中寻找,如果有就直接使用,如果没有则向上一级作用域中寻找,直到找到全局作用域,如果全局作用域中依然没有找到,则会报错

(5)在函数中要访问全局变量可以使用 window 对象

(6)在函数作用域中也有声明提前的特性,使用 var 关键字声明的变量,会在函数中所有代码执行之前被声明。函数声明也会在函数中所有的代码执行之前执行

(7)在函数中,不使用 var 声明的变量都会称为全局变量

(8)定义形参就相当于在函数作用域中声明了变量

    5、  this

(1)解析器在调用函数每次都会向函数内部传递一个隐含的参数 —— this

(2)this 指向的是一个对象,这个对象我们称为函数执行的 上下文对象

① 以函数的形式调用时,this 永远都是 window

② 以方法的形式调用时,this 就是调用方法的那个对象

    6、使用工厂方式创建对象

通过该方法可以大批量的创建对象

    7、构造函数

(1)使用工厂方法创建的对象,使用的构造函数都是Object,所以创建的对象都是 Object 这个类型,就导致我们无法区分出多种不同类型的对象。

(2)构造函数就是一个普通的函数,创建方法和普通函数没有区别,不同的是构造函数习惯上首字母大写。

(3)构造函数和普通函数的区别就是调用方式不同,普通函数是直接调用,构造函数需要使用 new 关键字来调用。

(4)构造函数执行的流程:

① 立刻创建一个新的对象

② 将新建的对象设置为函数中的 this ,在构造函数中可以使用 this 来引用新建的对象

③ 逐行执行函数中的代码

④ 将新建的对象作为返回值返回

(5)使用 instanceof 可以检查一个对象是否是一个类的实例

语法:

对象    instanceof  构造函数

如果是,则返回 true ,否则返回 false

(6)使用同一个构造函数创建的对象,我们称为一类对象,也将一个构造函数称为一个类。我们将通过一个构造函数创建的对象,称为是该类的实例。

(7)所有的对象都是 Object 的后代,所以任何对象和 Object 做 instanceof 检查时都会返回 true

(8) this 的情况:

① 当以函数的形式调用时,this 是 window

② 当以方法的形式调用时,谁调用方法 this 就是谁

③ 当以构造函数的形式调用时,this 就是新创建的那个对象

  8、原型对象

(1)将函数定义在全局作用域,污染了全局作用域的命名空间,而且定义在全局作用域中也很不安全。

(2)原型   prototype

我们所创建的每一个函数,解析器都会向函数中添加一个属性 prototype ,这个属性对应着一个对象,这个对象就是我们所谓的原型对象。

(3)如果函数作为普通函数调用 prototype 没有任何作用。当函数以构造函数的形式调用时,他所创建的对象中都会有一个隐含的属性,指向该构造函数的原型对象,我们可以通过 __proto__来访问该属性

(4)原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,我们可以将对象中共有的内容,统一设置到原型对象中。

(5)当我们访问对象的一个属性或方法时,他会先在对象自身中寻找,如果有则直接使用,如果没有则会去原型对象中寻找,找到则直接使用。

(6)以后我们创建构造函数时,可以将这些对象共有的属性和方法,统一添加到构造函数的原型对象中,这样不用分别为每一个对象添加,也不会影响到全局作用域,就可以使每个对象都具有这些属性和方法了。

(7)使用 in 检查对象中是否含有某个属性时,如果对象中没有但是原型中有,也会返回 true 。

(8)可以使用对象的 hasOwnProperty()来检查度夏宁自身中是否含有该属性。使用该方法只有当对象自身中含有属性时才会返回 true 。

(9)原型对象也是对象,所以他也有原型,当我们使用一个对象的属性或方法时,会先在自身中寻找,自身中如果有则直接使用,如果没有则去原型对象中寻找,如果原型对象中有,则使用,如果没有则去原型的原型中寻找,直到找到 Object 对象的原型,Object 对象的原型没有原型,如果在 Object 中依然没有找到,则会返回 undefined 。

    9、toString()

① 当我们直接在页面中打印一个对象时,实际上是输出对象的 toString()方法的返回值

② 如果我们希望在输出对象时不输出 [ object  object ] ,可以为对象添加一个 toString()方法

    10、垃圾回收(GC)

① 程序运行过程中也会产生垃圾,这些垃圾积攒过多,会导致程序运行速度过慢,所以我们需要一个垃圾回收的机制,来处理程序运行过程中产生的垃圾。

② 当一个对象没有任何的变量或属性对他进行引用,此时我们将永远无法操作该对象,此时这种对象就是一个垃圾,过多会占用大量的内存空间,导致程序运行变慢,所以这种垃圾必须进行清理。

③ 在 JS 中拥有自动的垃圾回收机制,会自动将这些垃圾对象从内存中销毁,我们不需要也不能进行垃圾回收的操作,我们需要做的就是将不再使用的对象设置为 null 即可。

本文分享到此结束,下一节继续分享JavaScript初级的数组。

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

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

相关文章

仓颉编程语言-001-第一个入门程序helloworld

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境 三、使用cjc方式开发三、使用cjpm方式 一、概述 本文档是针对仓颉编程语言编写的第一个入门程序,通过两种方式,第一种方式是cjc,第二种方式是cjpm。关于cjc和cjpm的使用,请参…

【html+css 绚丽Loading】 - 000006 四象轮回镜

前言:哈喽,大家好,今天给大家分享htmlcss 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 &#x1f495…

履带式排爆机器人技术详解

履带式排爆机器人是现代反恐、救援及危险环境处理领域中的重要工具。它们结合了先进的机械设计、智能感知、精确控制及高效算法,能够在复杂、危险的环境中执行排爆、侦察、取样等多种高风险任务,极大地保障了人员安全。履带式排爆机器人以其卓越的地面适…

IP地址申请SSL证书实现https教程

IP地址如果想实现HTTPS访问,则需要部署专门针对IP地址的SSL证书。为IP地址申请SSL证书并实现HTTPS加密连接是一个涉及多个步骤的过程。 下面是一份基本的教程(以国产服务商JoySSL为例): 1 注册账号 打开JoySSL官网,…

第11章 第4节 软件异常的分类及其关系(软件评测师)

V模型指出,(系统测试)对概要设计进行验证,(集成测试)对详细设计进行验证,(验收测试)当追溯到用户需求说明。 1.以下关于基于V&V原理的W模型的叙述中,&am…

[219] 存在重复元素 II

模拟滑动窗口 /** lc appleetcode.cn id219 langjava** [219] 存在重复元素 II*/// lc codestart class Solution {public boolean containsNearbyDuplicate(int[] nums, int k) {/*** 基本思路* 模拟 动态滑动窗口* 要求窗口左右两边的元素下标差,小于等于 k&…

链表基础算法题

1 移除链表元素 . - 力扣(LeetCode) 该题的思路是创建一个新链表,然后遍历原链表,将不是要求移除的链表元素放到新链表中,最后返回创建的新链表 就能达到移除链表元素的作用了。 当然这只是一种做法,还有…

HarmonyOS 开发

环境 下载IDE 代码 import { hilog } from kit.PerformanceAnalysisKit; import testNapi from libentry.so; import { router } from kit.ArkUI; import { common, Want } from kit.AbilityKit;Entry Component struct Index {State message: string Hello HarmonyOS!;p…

Java蛋糕店烘焙店系统小程序系统源码

解锁烘焙新纪元,揭秘“蛋糕店烘焙店系统”的甜蜜秘籍! 🌟【开篇:烘焙业的数字化浪潮】🌟 在这个快节奏的时代,传统烘焙行业也迎来了它的数字化转型时刻!你是否梦想过拥有一家高效运转、顾客满…

了解 JavaScript 中的请求 API

你准备好提升你的网络开发技能了吗?🚀 在当今数据驱动的世界中,了解如何从 API 获取和处理数据至关重要。本指南将引导您了解在 JavaScript 中发出 HTTP 请求的最新和最有效的方法,确保您的 Web 应用程序保持动态和前沿。 为什么请…

排序算法【冒泡排序】

一、原理 冒泡排序的原理比较简单&#xff0c;就是将待排序区域的数值挨个向后对比&#xff0c;直到比较到已排序的边界&#xff0c;就纳入已排序区域。 二、代码如下所示&#xff1a; #include <stdio.h> #include "test.h"/* 冒泡排序 */ void bubble_sort(…

【GH】【EXCEL】P2: Read DATA SET from EXCEL into GH

文章目录 ReadRead DataExcel Data sourceGH process and components instructionRead Data Read Data LiveLive Worksheet Read Read Data Excel Data source GH process and components instruction Read Data Read data from Excel Input parameters: Worksheet (Generic …

超网和无类间路由是什么?

​一、超网概述 超网是将多个连续的网络地址组合成一个增加的网络地址的技术。常用于减少路由器的路由表大小&#xff0c;网络的可扩展性。通过合并连续的子网&#xff0c;超网可以减少路由入侵的数量&#xff0c;从而提高网络的效率。 超网的实现基于合并多个具有连续IP地址…

html 首行缩进2字符

1. html 首行缩进2字符 1.1. 场景 在Html开发中让一段文字&#xff08;富文本等&#xff09;首行缩进两个文字&#xff0c;可能在前面加上8个“ ”&#xff0c;因为过去对CSS不熟悉&#xff0c;这种方法实现虽然比较直接&#xff0c;但是文字多的时候会有很多“ ”充斥在代码中…

openGauss 6.0安装过程解除对root用户依赖之gs_preinstall

目录 1.执行前提条件 1.1设置OS参数&#xff1a; 1.2定时任务权限 1.3 修改最大文件描述符 2.切换至omm用户&#xff0c;执行preinstall 3.source环境变量 4.执行gs_install 在给客户部署业务系统时&#xff0c;由于openGauss数据库的预安装过程需要用到root用户执行&am…

SD3+ComfyUI文生图生成指南

随着人工智能技术的飞速发展&#xff0c;文生图技术已经越来越成熟。SD3&#xff08;Stable Diffusion 3 Medium&#xff09;模型以其20亿参数的庞大容量&#xff0c;提供了高质量的图像生成能力。结合ComfyUI这一灵活的节点式操作界面&#xff0c;用户可以更加高效地进行创作。…

企业电脑防泄密用什么加密软件?10款2024年企业文件加密软件推荐

在当今信息化时代&#xff0c;企业数据安全已成为重中之重。文件加密软件能够有效保护敏感信息&#xff0c;防止数据泄露和未经授权的访问。本文将为您推荐十款优秀的企业文件加密软件&#xff0c;帮助企业提高信息安全性。 1.安秉网盾加密软件 安秉网盾加密软件是一款新一代…

虚拟机Linux的坑 | VMware无法从主机向虚拟机 跨系统复制粘贴拖动 文件/文本

这个情况下&#xff0c;还是没办法跨系统拖拽文件 解决办法&#xff1a; 在终端中输入命令 sudo apt-get autoremove open-vm-tools sudo apt-get install open-vm-tools sudo apt-get install open-vm-tools-desktop过程中只要需要选择是否覆盖的地方&#xff0c;都输入&…

8款StableDiffusion插件助你一臂之力

前言 在AI绘画领域&#xff0c;Stable Diffusion&#xff08;SD&#xff09;绝对是设计师和艺术家们最爱用的工具之一。它给设计师们带来了无限的创作灵感&#xff0c;不管是数字艺术、概念设计还是角色建模&#xff0c;都能让设计师们受益匪浅&#xff0c;大大提高他们的出图…

设计开发一个data-table

前言 在日常开发中&#xff0c;数据表格扮演着至关重要的角色。它以结构化的形式展现信息&#xff0c;使数据清晰易懂&#xff0c;开发者基于此类表格可以对其进行拓展和复用&#xff0c;本篇文章我们将循序渐进地介绍如何构建一个功能完善、易于使用的表格组件&#xff0c;并…