Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JS基础第二课(函数、对象篇)

JS基础第二课(函数、对象篇)

原创
作者头像
申小兮
发布于 2023-04-12 03:51:14
发布于 2023-04-12 03:51:14
61002
代码可运行
举报
文章被收录于专栏:前端开发基础前端开发基础
运行总次数:2
代码可运行

一、函数

1、概念

JavaScript中的重要功能,是一段代码的集合,这段代码可以在不同地方调用,从而提高JavaScript代码的复用性

2、函数的使用

(1)基本格式:

function 函数名(){   //定义函数的关键字     函数体 } 函数名();   //一定要调用函数,函数不会自己执行的

(2)定义函数的两种写法

①写法一:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
        function get() {
            console.log(1234);
        }
        get()
</script>

②写法二:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
        var post = function() {
            console.log(123);
        }
        post()
</script>

(3)函数的返回值:return

3、函数的参数

(1)形参:function 函数名(形参1,形参2...){}

(2)实参:函数名(实参1,实参2...)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
        var post = function(a) {//这里的a是形参
            console.log(a);//运行函数结果输出10
        }
        post(10)//这里的10是实参
</script>

(3)两者的个数匹配

①形参个数=实参个数,正常输出

②形参个数<实参个数,从左到右匹配

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
        var post = function(a) {//这里的a是形参
            console.log(a);//运行函数结果,还是输出10
        }
        post(10,23)//这里的10,23是两个实参
</script>

③形参个数>实参个数,未匹配的形参为undefined

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
        var post = function(a,b) {//这里的a是形参
            console.log(a);//运行函数结果输出10
            console.log(b);//运行函数结果输出undefined
        }
        post(10)//这里的10是实参
</script>

4、立即执行函数

(1)特点:不需要调用,直接可以自己执行的

(2)作用:创建一个独立的作用域,局部作用域

(3)两种写法:注意括号位置

①两个外层括号()(),第一个()写function函数,第二个()写参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
        (function(a) {
            console.log('执行',a);
        })(10)
</script>

②内外层(()),外层写function函数,内层写参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
        (function(a){
            console.log('执行',a);
        }(20))
</script>

二、作用域

1、概念

一段代码所用到的变量名,不是总是有效的,该变量名的使用范围就是作用域

2、全局作用域

作用于整个script标签、单独的js文件

3、局部作用域

在函数内部作用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
        var a = 10
        function test() {
            var b = 20
            console.log(a);//10
            console.log(b);//20
        }
        test()
        console.log(b);//b is not defined
</script>

 上图中的变量b作为函数test的局部变量,只能在函数里面被调用,在函数意外调用时会报错

4、全局变量和局部变量

(1)全局变量:在浏览器关闭才会销毁,比较占内存

(2)局部变量:在程序运行完就销毁,比较节省内存

5、预解析

(1)js解析器:预解析+代码执行

(2)变量提升:js引擎会把代码中所有的var声明提升到作用域的最顶层(函数的顶层),但是赋值不会被提升

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
        console.log(a);//不报错,只是输出为undefined
        var a=10
        function test() {
            console.log(b);//不报错,只是输出为undefined
            var b = 10
        }
        test()
        console.log(c);//报错c is not defined
</script>

三、对象

1、性质

一组无序的相关属性和方法的集合,所有的事物都是对象(字符串、数组、数值、函数...)

(1)属性:事物的特征

(2)方法:事物的行为

2、作用

可以保存一个值的变量、多个值的数组、一个人的信息

3、创建、获取的三种方法

(1)方法一:利用字面量{}大括号

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
        var str={//多个属性之间用逗号,隔开
            name:'小明',//属性和方法都是键值对
            age:18,
            sex:'男',
            hoppy:['学习','比赛'],
            say:function(){//方法后面跟的是匿名函数(不设置函数名)
                console.log('写文章啦');
                return '写到不能停'
            }
        }
        console.log(str);
        console.log(str.name);
        console.log(str['age']);
        console.log(str.hoppy);
        str.say();//直接调用方法,输出'写文章'
        console.log(str.say());//打印输出'写文章'、'写个不停'
</script>

 注意:

①name:'张三',//属性和方法都是键值对 键(属性): 值【键与值之间用:】

②多个属性之间用逗号,隔开

③方法后面跟的是匿名函数(不设置函数名)

获取属性值:对象名.属性名、对象名['属性名']

获取方法:对象名.方法名()

(2)方法二:new Object()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
        var user = new Object()
        user.name='小红'
        user.age=18
        console.log(user);
</script>

(3)方法三:构造函数:特殊的函数,用来初始化对象

function 构造函数名(参数1,参数2...){     this.属性名 = 值  //this:解析器每次在调用函数的时候都会想函数的内部传递一个隐含的参数     this.方法名 = 值 } var 变量名 = new 构造函数名//对象

注意:

①构造函数名的首字母要大写

②不需要return

③调用时用new

④new关键字执行过程

        a. new在内部创建一个空对象

        b. this指向刚刚创建的空对象

        c. 执行构造函数里面的代码,给这个空对象去添加属性跟方法

        d. 返回对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
        function Person(name1,age1,sex1) {
            this.name = name1
            this.age = age1
            this.sex = sex1
        }
        var p1 = new Person("小红",10,'女')
        console.log(p1);
</script>

 (4)遍历对象:for in

for(item in p1){     // item属性名     console.log(item);     console.log(p1[item]); }

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
        function Person(name1,age1,sex1) {
            this.name = name1
            this.age = age1
            this.sex = sex1
        }
        var p1 = new Person("小红",10,'女')
        // console.log(p1);
        for(item in p1){
            console.log(item);
            console.log(p1[item]);
        }
</script>

 四、内置对象

1、JavaScript对象分为

自定义对象、内置对象、浏览器对象

2、内置对象

js语言自带的对象,供开发者使用,提供一些常用的,基本的属性和方法,帮助快速开发

3、参考文档

JavaScript 对象实例 | 菜鸟教程

4、字符串对象

需要认识并掌握的部分方法如下:(更多方法小伙伴们可以去参考文档找🧐)

方法

描述

charAt()

返回指定位置的字符

indexOf()

返回指定字符串首次出现的位置

lastIndexOf()

从起始位置开始计算该字符串最后出现的位置(运行时是从后往前搜索)

includes()

查找字符串是否包含指定的子字符串

replace(searchvalue,newvalue)

查找匹配的子串,并替换与正则表达式匹配的子串

slice(start,end)

提取字符串片段,在新字符串中返回该片段

split(separator,limit)

字符串的分割

substr(start,length)

从某起始索引号开始提取指定数目的字符

substring(from,to)

提取指定索引号之间的字符

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
        function name() {
            var str ='Hello world!';
            console.log(str.charAt(4));
            console.log(str.indexOf('l'));
            console.log(str.lastIndexOf('o'));
            console.log(str.includes('lo'));
            console.log(str.replace('llo','ok'));
            newstr = str.slice(2,6);
            console.log(newstr);
            newstr2 = str.split(3,8);
            console.log(newstr2);
            newstr3 = str.substr(2,4);
            console.log(newstr3);
            newstr4 = str.substring(5,9);
            console.log(newstr4);
        }
        name()
</script>

5、Date日期对象(构造函数,需要使用new)

方法

描述

getFullYear()

getMonth()

getDate()

getDay()

星期

getHours()

小时

getMinutes()

分钟

getSeconds()

getTime()

返回1970年1月1日至今天的毫秒数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
        var date = new Date()
        console.log(date.getFullYear());
        console.log(date.getMonth()+1);
        console.log(date.getDate());
        console.log(date.getDay());
        console.log(date.getHours());
        console.log(date.getMinutes());
        console.log(date.getSeconds());
        console.log(date.getTime());
</script>

6、数组对象

方法

描述

push(item1, item2, ..., itemX)

在数组的末尾添加一个/更多元素,并返回新的长度

pop()

删除数组最后一个元素,并返回删除的元素

reverse()

反转数组的元素顺序

indexOf(item)

搜索数组中的指定元素,并返回它所在的位置

lastIndexOf(item)

搜索数组中的指定元素,并返回它最后出现的位置

join(separator)

把数组的所有元素放入一个字符串

forEach(function(currentValue, index, arr), thisValue)

数组每个元素都执行一次回调函数

includes()

判断一个数组是否包含一个指定的值

slice(start, end)

选取数组的一部10分,并返回一个新数组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
        var arr = [1, 2, 3, 4, 5, 6];
        arr.push(7);
        console.log(arr);
        arr.pop();
        console.log(arr);
        console.log(arr.indexOf(2));
        console.log(arr.lastIndexOf(1));
        arr.forEach(function (item) {
            console.log(item);
        });
        console.log(arr.includes(2));
        console.log(arr.slice(1, 4));
</script>

7、数学对象Math(不是构造函数,不需要new)

方法

描述

PI

圆周率(3.14159)

abs(x)

绝对值

floor(x)

对x做下舍入

ceil(x)

对x做上舍入

round(x)

四舍五入

max(x,y,z,...,n)

最大值

min(x,y,z,...,n)

最小值

random()

0~1之间的随机数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
        console.log(Math.PI);
        console.log(Math.abs(-123));
        console.log(Math.floor(3.14));
        console.log(Math.ceil(3.14));
        console.log(Math.round(3.14));
        console.log(Math.max(1,2,3,4,5));
        console.log(Math.min(1,2,3,4,5));
        console.log(Math.random());
</script>

 五、练习例子

1、求数组[1,23,54,121,33,4]所有元素的和以及平均值 2、var str = 'qwfvsdbwqqabksh1jdjiirhbzfhtq'; (1)字符q出现的次数 (2)统计每个字符出现的次数

3、封装一个格式化日期的方法yyyy-yy-yy

4、数组去重

var arr = [1,2,3,4,4,5,6,7,7,7,8,9,3,3,4,5,6,7,9]

5、返回随机1-100的整数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
        //1、求数组[1,23,54,121,33,4]所有元素的和以及平均值
        var arr1 = [1, 23, 54, 121, 33, 4]
        var sum = 0, avg = 0
        for (var i = 0; i < arr1.length; i++) {
            sum += arr1[i]
        }
        console.log(sum);
        avg = sum / (arr1.length)
        console.log(avg);
 
        //2、var str = 'qwfvsdbwqqabksh1jdjiirhbzfhtq';
        //(1)字符q出现的次数
        var count = 0, str2 = 'qwfvsdbwqqabksh1jdjiirhbzfhtq'
        for (var i = 0; i < str2.length; i++) {
            if (str2[i] == 'q') {
                count += 1
            }
        }
        console.log(count);
 
        //(2)统计每个字符出现的次数
        var str2 = 'qwfvsdbwqqabksh1jdjiirhbzfhtq', str3 = ''
        var count = {};
        for (var i = 0; i < str2.length; i++) {
            if (count[str2[i]]) {
                count[str2[i]]++;
            } else {
                count[str2[i]] = 1;
            }
        }
        console.log(count);
 
        //3、封装一个格式化日期的方法
        //法1
        var date = new Date()
        var str = ''
        str = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate()
        console.log(str);
        //法2
        var a = '', b = '', c = ''
        function getdate(y, m, d) {
            var date = new Date();
            var y = date.getFullYear();
            var m = date.getMonth() + 1;
            var d = date.getDate();
            console.log(y + '-' + m + '-' + d);
        }
        getdate(a, b, c)
 
        //4、数组去重
        var arr4 = [1, 2, 3, 4, 4, 5, 6, 7, 7, 7, 8, 9, 3, 3, 4, 5, 6, 7, 9]
        var newArr = '';
        for (var i = 0; i < arr4.length; i++) {
            if (newArr.lastIndexOf(arr4[i]) == -1) {
                newArr += arr4[i];
            }
        }
        console.log(newArr);
 
        //5、返回随机1-100的整数
        console.log(Math.round(Math.random() * 100));
 
    </script>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ES6新特性
由于ES6在一些低版本的浏览器上无法运行,需转成ES5之前的版本兼容,以下有几种方案可以自动转换
jinghong
2020/05/09
1.1K0
ES6新特性
JS基础第二课(数组篇)
(1)方式一:var arr = new Array()//arr变量名,Array()方法
申小兮
2023/04/11
3830
JS基础第二课(数组篇)
前端js基础教程
Netscape在最初将其脚本语言命名为LiveScript,后来Netscape在与Sun合作之后将其改名为JavaScript。JavaScript最初受Java启发而开始设计的,目的之一就是“看上去像Java”,因此语法上有类似之处,一些名称和命名规范也借自Java。JavaScript与Java名称上的近似,是当时Netscape为了营销考虑与Sun微系统达成协议的结果。Java和JavaScript的关系就像张雨生和张雨的关系,只是名字很像。
张哥编程
2024/12/13
2620
前端js基础教程
这些JS工具函数够你用到2020年底了
前言 活不多说,自己平时搜集的干货函数奉上。 干货函数 找出数字在数组中下一个相邻的元素 let i = ""; let rr = []; const name = (n, arr1)=>{ let num = Number(n); for (let i = 0; i < arr1.length; i++) { const element = arr1[i]; if (element != num) { rr.push(num
Vam的金豆之路
2021/12/01
2860
JavaScript基础
「计算机语言」分为机器语言,汇编语言,高级语言。计算机内部最终执行的都是机器语言,由0和1这样的二进制数构成。
小城故事
2023/03/10
1.1K0
JavaScript基础
JAVA保姆式上手教程之JAVAWEB day01-js基础
张哥编程
2024/12/13
880
TypeScript 基础学习
TypeScript和其他的区别和好处在哪里我就不说了,既然选择学习它,就一定有它的优点
炒香菇的书呆子
2022/04/13
6890
TypeScript 基础学习
JS进阶第一课【this,严格模式,闭包】
JavaScript会提供一些函数方法来帮助我们更优雅地处理函数内部this指向问题,常用的有:call()、apply()、bind()
申小兮
2023/04/27
3610
前端架构师进阶之路07_JavaScript函数
相当于将一条或多条语句组成的代码块包裹起来,在使用时只需关心参数和返回值,就能完成特定的功能,而不用了解具体的实现。
张哥编程
2024/12/13
1930
前端架构师进阶之路07_JavaScript函数
后端眼中的JavaScript长啥样?这篇文章告诉你。
数组是指一组数据的集合,其中的每个数据被称作元素,在数组中可以存放任意类型的元素。数组是一种将一组数据存储在单个变量名下的优雅方式。数组可以把一组相关的数据一起存放,并提供方便的访问(获取)方式。
上分如喝水
2022/02/26
8950
后端眼中的JavaScript长啥样?这篇文章告诉你。
JavaScript基础①
你点我一下试试 <a href="javascript: alert('kick your ass');">你点我一下试试</a>
ymktchic
2022/01/18
2.9K0
JavaScript基础①
前端day10-JS学习笔记(数组、函数、对象)
3.变量取值: 函数名 (不会执行函数体代码,只是以字符串形式将变量中存储的东西打印出来而已)
帅的一麻皮
2020/04/09
1.8K0
前端day10-JS学习笔记(数组、函数、对象)
JavaScript基础
一 JavaScript的基础 1.1 JS的引入方式 1 直接编写 <script> alert('hello yuan') </script> 2 导入文件 <script src="hello.js"></script> 1.2 JS的变量、常量和标识符 1.2.1 JS的变量 1 2 3 x=5 y=6 z=x+y 在代数中,我们使用字母(比如 x)来保存值(比如 5)。通过上面的表达式 z=x+y,我们能够计算出 z
用户1214487
2018/01/24
2.1K0
JavaScript基础
前端day11-JS学习笔记(构造函数、对象的API、作用域、arguments关键字)
当我们想要创建多个对象时很容易造成代码冗余,那么我们可以使用函数或者自定义构造函数去创建对象。
帅的一麻皮
2020/04/11
8880
前端day11-JS学习笔记(构造函数、对象的API、作用域、arguments关键字)
JavaScript 入门基础 - 对象(五)
我们生活中的每一个事物都是一个对象,比如一片树叶、一只狗、一个人等等都可以是对象,在JavaScript当中,对象则指的是一组无序的相关属性和方法的集合,有字符串、数值、函数等等…总的来讲对象由属性和方法构成:
EXI-小洲
2023/02/28
8840
JavaScript 入门基础 - 对象(五)
javascript面向对象
对象的属性名没有任何的要求,不需要遵守表示符的规范,但是尽量按照表示符的要求去写。
OY
2022/02/21
7230
js基础
一个html页面由那几部分组成的? html(超文本标记语言)、css(层叠样式表)、js(动态脚本语言)(操作页面上所有元素,让元素具有动态的效果) 前端工程师工作的内容: 拿到UI设计图:切图---->html+css静态布局----->用js写一些动态效果----->ajax和后台进行交互,把数据绑定到页面上---->用nodejs服务平台做源代码的管理---->用nodejs做后台 用到的开发工具有: Dw、sublime、webstrom、hbuild、eclipse...... 将css引
河湾欢儿
2018/09/06
4.2K0
3)js的基础语法使用以及css定位
var north = ['北京','山东','天津']; var south = ['东莞','深圳','上海']; var newCity = north.concat(south); console.log(newCity)
py3study
2020/01/08
1.1K0
1-JavaScipt基础概念
一门客户端脚本语言(客户端指运行在客户端浏览器中,每一个浏览器都有JavaScript解析引擎。脚本语言指不需要通过编译,直接就可以被浏览器解析执行)
Ywrby
2022/10/27
9770
1-JavaScipt基础概念
Javascript提升阶段学习
JavaScript 1:javascript简介   JavaScript是一种脚本语言,能实现网页内容的交互显示,当用户在客户端显示该网页时,浏览器就会执行JavaScript程序,用户通过交互
别先生
2017/12/29
1.3K0
相关推荐
ES6新特性
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验