当前位置: 首页 > article >正文

JavaScript基础(函数及面向对象)

函数

定义函数

Java定义方法:

public 返回值类型 方法名(){

        return 返回值

}

定义函数方法一

eg:定义一个绝对值函数

function abs(x) {if (x>=0){return x;}else {return -x;}}

调用函数:

注意:一旦执行到return代表函数结束,返回结果。

如果没有执行return,函数执行完也会返回结果,结果为undefined

定义函数方法二

var abs1=function (x) {if (x>=0){return x;}else {return -x;}}

调用函数:

function(x){.....}这是一个匿名函数,但是可以把结果赋值给abs,通过abs就可以调用函数

方式一和方式二等价

参数问题

JavaScript可以传递任意个参数,也可以不传递参数

1.当调用函数时不传递参数依然会返回结果:

手动添加异常处理:

不传递参数与传递参数对比:

2.arguments

是JS免费赠送的关键字,代表传递进来的所有参数是一个数组

默认情况下,当函数传递多个参数时,会返回第一个参数结果:

利用arguments可以拿到所有参数

存在问题:arguments包含所有的参数,我们需要使用多余的参数时,需要排除已有的参数

rest函数

获取处理已经定义的参数之外的所有参数

使用argument获取多余数字:

function aaa(a,b) {console.log("a=>"+a);console.log("b=>"+b);for (var i=2;i<arguments.length;i++){console.log("多余"+arguments[i]);}}

使用rest获取多余数字:

rest参数只能写在最后面,必须用...表示

变量的作用域

在JavaScript中,var定义变量实际是有作用域的,在函数体内声明的变量,在函数体位不可以使用。(若想使用,闭包可以实现该功能)

function s() {var x;x=x+1;}x=x+1;

如果两个函数使用了相同的变量名,只要在函数内部,就不会产生冲突。如下:

function s() {var x;x=x+1;}//两个函数的x互不影响function z() {var x=3;x=x+1;}

内部函数可以访问外部函数的成员,反之不行,如下:

function a() {var x=1;function b() {var y=x+1;  //2}var z=y+1;  // y is not defined}

内部函数变量和外部函数的变量重名。如下

在JavaScript中,函数查找变量从自身函数开始。查找是由内向外。假设外部存在同名函数变量,内部函数会屏蔽外部函数变量。

function c() {var x=1;function d() {var x='A';console.log('outer:'+x);//inner:1}console.log('inner:'+x);//outer:Ad();//调用d函数}c();//调用c函数

提升变量的作用域,js执行引擎,自动提升了y的声明,但是不会提升变量y的赋值,如下:

function e() {var x="x"+y;console.log(x);var y='y';}e();    //xundefined

注意:所有的变量定义都放在函数的头部,便于代码维护。

全局函数

var x=1;//全局变量function f() {console.log(x);//1}f();console.log(x);//1

全局对象window

 //全局对象windowvar x='xxx';alert(x);alert(window.x);

默认所有的全局变量,都会自动绑定在window对象下。

alert()这个函数本身也是一个window变量。

var x='xxx';/*alert(x);alert(window.x);*/window.alert(x);var old_alert=window.alert;window.alert=function () {};window.alert(123);//次弹窗不会弹出,失效//恢复弹窗window.alert=old_alert;window.alert(456)//恢复弹窗456

JavaScript实际上只有一个全局作用域,任何变量(函数也视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到,报错RefrenceError

规范

由于使用的全局变量都会绑定到window上,如果不同的js文件所有了相同的全局变量,会产生冲突,如何减少冲突。如下:

 //唯一一个全局变量var zhangsanApp={};//定义全局变量zhangsanApp.name='zhangsan';zhangsanApp.abs=function (a,b) {return a+b;}

把自己的代码全部放入自己定义的唯一空间名字中,降低全局命名冲突的问题

局部作用域        let

为了解决以上局部作用域冲突问题,产生关键字let

建议使用let去定义局部作用域的变量

常量const

常量用大写字母定义

 const PI='3.15';console.log(PI);PI='123';console.log(PI)//Assignment to constant variable.

方法

定义方法

方法就是函数放在对象内部,对象只有属性和方法

var serenity={name:'张三',bitrh:2001,age: function () {//今年减去出生年var now=new Date().getFullYear();//获取当前日期return now-this.bitrh;}}

调用属性:对象.属性

serenity.name;

调用方法:对象.方法名()

serenity.age()

this关键字是无法指向的,默认指向调用它的对象,如下:

//定义方法二function getAge() {//今年减去出生年var now=new Date().getFullYear();//获取当前日期return now-this.bitrh;}var serenity={name:'张三',bitrh:2001,age: getAge}

1.通过对象调用函数

serenity.age()        //2001-当前时间

2.直接调用函数

getAge()        //NaN,无法得到数据

3.apply方法在JS中可以控制this的指向

getAge().apply(serenity,[]);        //函数名.apply(指向对象,参数)

内部对象

标准对象:如下

获取数据类型 typeof 数据

typeof 123
'number'
typeof '123'
'string'
typeof true
'boolean'
typeof undefined
'undefined'

typeof NaN
'number'
typeof []
'object'
typeof {}
'object'
typeof Math.abs
'function'

Date对象

var now=new Date();//获取当前时间

//Tue Feb 25 2025 12:26:38 GMT+0800 (中国标准时间)

Date对象的常用方法: 

var now=new Date();//获取当前时间Tue Feb 25 2025 12:26:38 GMT+0800 (中国标准时间)now.getFullYear();//年now.getMonth();//月now.getDate();//日now.getDay();//星期几now.getHours();//时now.getMinutes();//分now.getSeconds();//秒now.getTime();//时间戳  统一:从1970年1月1日0:00:00到目前的毫秒数//根据时间戳转换为当前时间console.log(new Date(1740457598294));//Tue Feb 25 2025 12:26:38 GMT+0800 (中国标准时间)

常用转换:时间戳转化为北京时间

now=new Date(1740457598294);
console.log(now.toLocaleString());//    2025/2/25 12:26:38

JSON

早期所有数据传输用XML文件

JSON(JavaScript Object Notation,JavaScript对象表示法)是基于ECMAScript的一个子集设计的,是一种开放标准的文件格式和数据交换格式。其简洁和清晰的层次结构有效地提升了网络传输效率,使其成为理想的数据交换语言。

在JavaScript中一切皆为对象,如何JS支持的类型都可以用JSON来表示。

格式:

  • 对象用{}
  • 数组用[]
  • 所有的键值对用:key:value

 JSON字符串和JS对象的转化

//定义一个JS对象 
var user={name:"serenity",age:3,Phone:123456789}//对象转换为JSON字符串//{"name":"serenity","age":3,"Phone":123456789}var jsonUser= JSON.stringify(user)//json字符串转化为对象  参数为json字符串//{name: 'serenity', age: 3, Phone: 123456789}var json=JSON.parse('{"name":"serenity","age":3,"Phone":123456789}')

JSON.stringify(对象名)       //对象转化为JSON字符串

JSON.parse("JSON字符串"  //JSON字符串转化为JS对象

JSON和JS的区别:

var obj={a:'hello',b:'hellob'};

var json='{"a":"hello","b":"hellob"}'

面向对象

了解

JavaScript、Java、c#等都是面向对象

  • 类:模板
  • 对象:具体的实例

在JavaScript中,原型对象

原型链_proto_

class

class关键字在ES6引入,

定义一个类

//定义一个Student类
class Student{
    //构造器
    constructor(name) {
        this.name=name;
    }
    //hello方法
    hello(){
       console.log("hello");
    }
};
var xiaomin=new Student("xiaomin");        //创建对象
var xiaohong=new Student("xiaohong");        //创建对象

调用:

xiaomin.hello()

xiaohong.hello()

继承extends

在继承中,子类需要使用父类的方法或属性时,需要使用super关键字。在调用对象时,都是先调用父类的构造器,在调用子类的构造器,显式的调用父类构造器时,super()必须写在子类中的第一行。

相关文章:

JavaScript基础(函数及面向对象)

函数 定义函数 Java定义方法&#xff1a; public 返回值类型 方法名(){ return 返回值 } 定义函数方法一 eg&#xff1a;定义一个绝对值函数 function abs(x) {if (x>0){return x;}else {return -x;}} 调用函数&#xff1a; 注意&#xff1a;一旦执行到return代表函数…...

2025面试Go真题第一场

前几天参加了一场面试&#xff0c;GoLang 后端工程师&#xff0c;他们直接给了我 10 道题&#xff0c;我留了一个截图。 在看答案之前&#xff0c;你可以先简单做一下&#xff0c;下面我会对每个题目做一个说明。 文章目录 1、golang map 是否并发安全?2、协程泄漏的原因可能是…...

dockerfile基于alpine构建haproxy

1. 结构目录 [rootlocalhost ~]# tree haproxy/ haproxy/ ├── dockerfile └── files├── env.txt├── haproxy-2.5.0.tar.gz├── haproxycfg.sh├── install.sh└── sysctl.conf1 directory, 6 files [rootlocalhost ~]# 2. 编写dockerfile [rootlocalhost ~…...

【有奖实践】轻量消息队列(原 MNS)订阅 OSS 事件实时处理文件变动

当你需要对对象存储 OSS&#xff08;Object Storage Service&#xff09;中的文件变动进行实时处理、同步、监听、业务触发、日志记录等操作时&#xff0c; 你可以通过设置 OSS 的事件通知规则&#xff0c;自定义关注的文件&#xff0c;并将 OSS 事件推送到轻量消息队列&#x…...

关于Postman自动获取token

在使用postman测试联调接口时&#xff0c;可能每个接口都需要使用此接口生成的令牌做Authorization的Bearer Token验证&#xff0c;最直接的办法可能会是一步一步的点击&#xff0c;如下图&#xff1a; 在Authorization中去选择Bearer Token&#xff0c;然后将获取到的token粘贴…...

Baklib知识中台构建企业智慧中枢

智能技术架构构建路径 Baklib知识中台的技术架构设计以模块化和可扩展性为核心&#xff0c;通过分层解耦的架构体系实现知识管理的全流程覆盖。底层依托智能语义分析引擎与多模态知识图谱&#xff0c;完成非结构化数据的自动清洗与语义关联&#xff1b;中间层构建统一的知识资…...

解决安卓recyclerView滚到底部不彻底问题

问题分析&#xff1a; 传统recycleview滚到到底部方式scrollToPosition(lastpositon)&#xff0c;只能定位到最后一条数据的顶部。由于数据过长&#xff0c;无法滚动到最底部。 问了下deepseek&#xff0c;给了个方案&#xff1a; private void recyclerViewScrollToBottom()…...

python unzip file

要在 Python 中解压文件并显示进度&#xff0c;我们需要在解压过程中跟踪文件的提取进度。由于 zipfile 模块本身不直接支持进度显示&#xff0c;我们可以通过手动计算并使用 tqdm 库来显示进度条。 安装 tqdm 首先&#xff0c;确保你已经安装了 tqdm 库&#xff0c;用于显示…...

Elasticsearch索引设计与分片策略深度优化-手记

一、索引设计的黄金法则&#xff08;从踩坑到精通的必经之路&#xff09; 1. 字段类型显式声明原则 动态映射是新手最易踩的坑&#xff0c;某金融平台曾因金额字段被自动识别为text类型&#xff0c;导致聚合查询时触发OOM。正确做法应显式声明核心字段&#xff1a; PUT /fin…...

StepAudio:语音大模型

Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#xff0c;方言&#xff…...

监听其他音频播放时暂停正在播放的音频

要实现当有其他音频播放时暂停当前音频&#xff0c;你可以使用全局事件总线或 Vuex 来管理音频播放状态。这里我将展示如何使用一个简单的事件总线来实现这个功能。 首先&#xff0c;你需要创建一个事件总线。你可以在项目的一个公共文件中创建它&#xff0c;例如 eventBus.js…...

Kafka可视化工具EFAK(Kafka-eagle)安装部署

Kafka Eagle是什么&#xff1f; Kafka Eagle是一款用于监控和管理Apache Kafka的开源系统&#xff0c;它提供了完善的管理页面&#xff0c;例如Broker详情、性能指标趋势、Topic集合、消费者信息等。 源代码地址&#xff1a;https://github.com/smartloli/kafka-eagle 前置条件…...

[Web 安全] PHP 反序列化漏洞 —— PHP 反序列化漏洞演示案例

关注这个专栏的其他相关笔记&#xff1a;[Web 安全] 反序列化漏洞 - 学习笔记-CSDN博客 PHP 反序列化漏洞产生原因 PHP 反序列化漏洞产生的原因就是因为在反序列化过程中&#xff0c;unserialize() 接收的值可控。 0x01&#xff1a;环境搭建 这里笔者是使用 PhpStudy 搭建的环…...

2.部署kafka:9092

官方文档&#xff1a;http://kafka.apache.org/documentation.html (虽然kafka中集成了zookeeper,但还是建议使用独立的zk集群) Kafka3台集群搭建环境&#xff1a; 操作系统: centos7 防火墙&#xff1a;全关 3台zookeeper集群内的机器&#xff0c;1台logstash 软件版本: …...

springboot博客系统详解与实现(后端实现)

目录 前言&#xff1a; 项目介绍 一、项目的准备工作 1.1 数据准备 1.2 项目创建 1.3 前端页面的准备 1.4 配置配置文件 二、公共模块 2.1 根据需求完成公共层代码的编写 2.1.1 定义业务状态枚举 2.1.2 统一返回结果 2.1.3 定义项目异常 2.1.4 统一异常处理 三、业…...

14.12 Auto-GPT OutputParser 架构设计:构建安全可控的大模型输出管道

Auto-GPT OutputParser 架构设计:构建安全可控的大模型输出管道 关键词:Auto-GPT 输出解析、结构化响应控制、内容安全过滤、多格式输出适配、错误恢复机制 1. OutputParser 的核心作用与设计挑战 输出解析的三大核心任务: #mermaid-svg-sUqVk51rX50EHefe {font-family:&q…...

seacmsv9注入管理员账号密码+orderby+limit

一、网上收集&#xff1a; 海洋影视管理系统&#xff08;seacms&#xff0c;海洋cms&#xff09;是一套专为不同需求的站长而设计的视频点播系统&#xff0c;采 用的是 php5.Xmysql 的架构&#xff0c;seacmsv9漏洞文件&#xff1a;./comment/api/index.php&#xff0c;漏洞参数…...

企业级大模型应用的Java-Python异构融合架构实践

一、后端语言相关技术生态 Python语言 Python在AI计算领域拥有全面的生态支持&#xff1a; 底层工具库: Pandas、NumPy、SciPy、Matplotlib深度学习框架: PyTorch、TensorFlow领域专用框架: HuggingFace Transformers&#xff08;社区生态为主&#xff09; 常见Python框架 …...

C#连接sql server

连接时&#xff0c;出现如下提示&#xff1a; ERROR [IM014] [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中&#xff0c;驱动程序和应用程序之间的体系结构不匹配 原因是odbc的驱动和应用程序的架构不一致。我的odbc如下所示&#xff1a; 显示为64位&#xff0c;而c#程序显…...

粉色和紫色渐变壁纸怎么设计?

粉色和紫色的渐变壁纸设计可以打造极为浪漫的氛围&#xff0c;这两种颜色的搭配极具梦幻感与浪漫气息&#xff0c;常被用于各种浪漫主题的设计之中。以下是关于粉色和紫色渐变壁纸的设计方法&#xff1a; 一、渐变方向设计 横向渐变&#xff1a;从画面左侧的粉色过渡到右侧的紫…...

计算机网络:从底层原理到前沿应用,解锁数字世界的连接密码

计算机网络&#xff1a;从底层原理到前沿应用&#xff0c;解锁数字世界的连接密码 在信息如洪流般奔涌的时代&#xff0c;计算机网络宛如无形的脉络&#xff0c;贯穿于我们生活的每一个角落。它不仅是数据传输的通道&#xff0c;更是连接全球、驱动创新的核心力量。从日常的网络…...

AOP基础-01.快速入门

一.AOP 对于统计每一个业务方法的耗时这一操作&#xff0c;如果再业务层的每一个方法前获取方法运行的开始时间&#xff0c;方法结束获取结束时间&#xff0c;然后计算执行耗时&#xff0c;那这样就太繁琐了。能不能定义一个模板方法&#xff0c;使得该方法能够在业务层的方法执…...

Linux主机用户登陆安全配置

Linux主机用户登陆安全配置 在Linux主机上进行用户登录安全配置是一个重要的安全措施&#xff0c;可以防止未经授权的访问。以下是如何创建用户hbu、赋予其sudo权限&#xff0c;以及禁止root用户SSH登录&#xff0c;以及通过ssh key管理主机用户登陆。 创建用户hbu 使用具有…...

Solidity 开发环境

Solidity 开发环境 Solidity编辑器&#xff1a;Solidity编辑器是⼀种专⻔⽤于编写和编辑Solidity代码的编辑器。常⽤的Solidity编辑器包括 Visual Studio Code、Atom和Sublime Text。以太坊开发环境&#xff1a;以太坊开发环境&#xff08;Ethereum Development Environment&a…...

图像处理、数据挖掘、数据呈现

目录 图像处理方法 阈值分割 图像处理方法 图像平滑 图像锐化 图像增强 阈值分割 边缘检测 阈值分割 特征提取 提取边界 区域提取 主成分压缩 POI 多源数据 数据挖掘 多源数据提取 关联度提取 位置集群&#xff0c; 新闻事件&#xff0c; 权限 个人喜好 历史…...

Go小技巧易错点100例(二十三)

本期分享&#xff1a; 1.Go Module控制Go版本 2.int转string注意事项 3.Go项目查看mod依赖关系 Go Module控制Go版本 当我们开发Go项目涉及到两台及以上的机器&#xff0c;而且它们又刚好是不同操作系统的时候&#xff0c;可能就要把代码挪到另一台机器上重新编译&#xff…...

JVM生产环境问题定位与解决实战(三):揭秘Java飞行记录器(JFR)的强大功能

提到飞行记录器&#xff0c;或许你的脑海中并未立刻浮现出清晰的画面&#xff0c;但一说起“黑匣子”&#xff0c;想必大多数人都能恍然大悟&#xff0c;知晓其重要性及用途。在航空领域&#xff0c;黑匣子作为不可或缺的设备&#xff0c;默默记录着飞行过程中的每一项关键数据…...

使用Docker Desktop部署GitLab

1. 环境准备 确保Windows 10/11系统支持虚拟化技术&#xff08;需在BIOS中开启Intel VT-x/AMD-V&#xff09;内存建议≥8GB&#xff0c;存储空间≥100GB 2. 安装Docker Desktop 访问Docker官网下载安装包安装时勾选"Use WSL 2 instead of Hyper-V"&#xff08;推荐…...

MySQL数据库连接池泄露导致MySQL Server超时关闭连接

前言 最近做项目&#xff0c;发现老项目出现xxx&#xff0c;这个错误其实很简单&#xff0c;出现在MySQL数据库Server端对长时间没有使用的client连接执行清楚处理&#xff0c;因为是druid数据库&#xff0c;且在github也出现这样的issue&#xff1a;The last packet successf…...

力扣 下一个排列

交换位置&#xff0c;双指针&#xff0c;排序。 题目 下一个排列即在组成的排列中的下一个大的数&#xff0c;然后当这个排列为降序时即这个排列最大&#xff0c;因为大的数在前面&#xff0c;降序排列的下一个数即升序。所以&#xff0c;要是想找到当前排列的下一个排列&…...