2.javascript基础-基本语法 js面向对象 闭包 数组

Node.js特训专栏-基础篇:2. JavaScript核心知识在Node.js中的应用 函数调用在Node.js开发中无处不在。例如,在一个处理用户注册逻辑的模块中,可能会定义一个// 执行用户注册的具体逻辑,如验证用户名是否已存在、加密密码、写入数据库等console.log(`用户${// 执行用户注册的具体逻辑,如验证用户名是否已存在、加密密码、写入数据库等 console . log(` 用户 ${ username } 注册成功 `);} // 模拟接收到用户注册请求时调用函数 registerUser("JohnDoe" , "securePassword123"); 阅读详情

数组对象的常用方法

    var arr = new Array(4, 3, 2, 1);
    alert(arr.toString());//toString()方法返回以逗号隔开的所有元素组成的字符串
    alert(arr.join('|'));//在数组各个元素中间插入指定的字符
    alert(arr.reverse().toString());//数组反转
    alert(arr.concat([5, 6, 7, 8, 9]).toString());//连接两个数组
    alert(arr.sort().toString());//升序排列
    alert(arr.push('p'));//向数组的末尾添加一个或多个元素,并返回新的长度。
    alert(arr.pop());//返回数组的最后一个元素
    alert(arr.shift().toString());//删除并返回数组的第一个元素
    arr.unshift([9, 0]);//向数组的开头添加一个或更多元素,并返回新的长度。
    alert(arr.slice(1, 4).toString());//从某个已有的数组返回选定的元素
    arr.splice(0, 4, [1, 2, 3, 4]);//删除元素,并向数组添加新元素。

数组对象的sort()方法

如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数
a 和 b,其返回值如下:

    var arr = new Array(3, 1, 4, 3, 4, 3, 43, 65, 7, 8665);
    alert(arr.sort().toString());//不提供参数默认按照字符编码顺序进行排序
    arr.sort(function (a,b) {
        return a - b;
    });
    alert(arr.toString());

js中的键值对集合

第一种声明键值对集合的方式:数组形式
键值对数组的length属性值为0,因为length属性只支持索引为数字的数组,因此想要循环遍历键值对数组必须使用for-in循环

    var arr = new Array();
    arr['zs'] = '张三';
    arr['ls'] = '李四';
    arr['ww'] = '王五';
    //根据键查找值
    alert(arr['zs']);
    //键值对数组的length属性值为0,因为length属性只支持索引为数字的数组,因此想要循环遍历键值对数组必须使用for-in循环
    for (var key in arr) {
        alert('键:' + key + "   值:" + arr[key]);
    }

第二种声明键值对集合的方式:json格式

        var dict = { 'zs': '张三', 'ls': '李四', 'ww': '王五' };
        //还可以动态添加键和值
        dict.zl = '赵六';
        alert(dict.ls);//直接可以通过键值对对象点出来
        //循环遍历
        for (var key in dict) {
            alert('键:' + key + "   值:" + dict[key]);
        }

js中的String对象、Date对象、Math对象
String对象相关方法
Date对象相关方法
Math对象相关方法
js面向对象

    //这是一个函数,也可以叫做“函数对象”
    function Person() {
    }
    //第一种方式
    //对于Person函数可以直接调用,直接调用就是将Person()当做一个"函数"来使用
    //比如:
    Person();//把Person()当做一个普通函数来调用
    //把Person函数当做"类"来使用,通过Person函数创建一个Person类型的对象p。
    //当调用Person函数前加了new关键字,表示要通过Person函数创建一个对象。此时,一般把Person()函数叫做"构造函数"。也就是说,当直接调用一个函数的时候,那么叫"函数",当通过new关键字调用一个函数的时候,这个函数就叫做"构造函数"(不叫"类")。
    var p = new Person();//这样就创建了一个Person类型的对象p
    //当定义一个函数的时候,如果要将该函数作为"构造函数"来使用,那么函数命名就应该采用"帕斯卡"命名法。如果定义函数的时候就已经确定将来该函数只作为一个普通函数来调用,那么就采用"骆驼命名法"。
    //通过构造函数创建Person对象
    function Person(name, age, gender) {
            this.userName = name;//这里的this表示通过构造函数创建的当前对象
            this.userAge = age;
            this.userGender = gender;
            this.sayHi = function () {
                alert('大家好,我叫' + this.userName + ",今年" + this.userAge + "岁了。");
            }
        }
    var p1 = new Person('张三', 18, '男');
    p1.sayHi();

    //对象的属性也可以通过键值对的方式进行访问,所以对象也可以进行遍历
    alert(p1['userName']);//对象的属性通过键值对方式进行访问
    for (var key in p1) {
            alert(key + '     ' + p1[key]);
        }

js中判断某个对象是否为某个类型,使用instanceof关键字

    function Person() { }
    var p = new Person();
    alert(p instanceof Person);//和C#中的is关键字效果一样

通过对象字面量来创建对象,这种方式不需要再去创建构造函数,可以快速的封装一个数据

    var p1 = {
        userName: '张三',
        userAge:20,
        userGender: '男',
        sayHi: function () {
            alert('hi...');
        },
        sayHello: function () {
            alert('hello.....');
        }
    }
    p1.sayHello();
    p1.sayHi();

js中的原型对象prototype
prototype原型对象

  function Person(name, age, gender) {
        this.userName = name;
        this.userAge = age;
        this.userGender = gender;
    }
    Person.prototype.sayHi = function () {//为Person类型通过prototype属性注册一个方法
        alert(this.userName + this.userAge + this.userGender);
    }

    var p1 = new Person('张三', 19, '男');
    var p2 = new Person('李四', 20, '男');
    p1.sayHi();
    p2.sayHi();

js原型中的属性是只读的

    Person.prototype.userEmail = 'sample@163.com';
    var p1 = new Person('张三');
    //下面的代码并没有修改原型中的userEmail属性的值,只是动态地为p1对象添加了userEmail属性
    p1.userEmail = 'zs@163.com';//将userEmail的属性值修改成了"zs@163.com",其实原型中的userEmail属性值并没有改变,因为原型是只读的,这里只是将p1对象中添加了一个userEmial属性。当后面p1对象再次访问userEmial属性的时候,就是访问的p1对象本身的userEmail属性。
    var p2 = new Person('李四');
    alert(p1.userEmail);//此时打印"zs@163.com",这个userEmial属性不是来自原型,而是自身注册的
    alert(p2.userEmail);//此时打印"sample@163.com",p2对象打印的还是原型中的userEmail属性

通过原型进行扩展方法

一般不要给系统类型通过原型添加扩展的方法,因为如果后期系统类型也添加同名的方法,会造成混乱。

 //加入要给系统类型添加一个方法
    String.prototype.addStar = function () {
        return this + "☆";
    }
    var str = '1234';
    str= str.addStar();
    alert(str);

js中没有"类"的概念,"继承"是通过对象和对象来实现的

 //声明一个Person函数对象
    function Person(name, age, gender) {
        this.user_name = name;
        this.user_age = age;
        this.user_gender = gender;
    }
    //为Person函数对象添加扩展方法
    Person.prototype.sayHi = function () {
        alert('hi...'+this.user_name);
    }
    //声明一个Student函数对象
    function Student(sid, age, gender) {
        this.stu_id = sid;
        this.stu_age = age;
        this.stu_gender = gender;
    }
    var p1 = new Person();
    Student.prototype = p1;//这句话就实现了Student类型继承自Person类型,记得一定是把Person类型的对象赋值给Student函数对象的prototype属性才行
    var s1 = new Student('李四', 19, '女');
    s1.user_name = '王五';//Student类型的对象就能够访问Person类型的成员了
    s1.sayHi();

模拟私有属性

        //模拟私有属性
        function Person(name) {
            this.user_name = name;
            var user_age;//实例化的Person对象是无法直接访问这个所谓的"属性"的,可以将这个"属性"看作是"私有的"
            this.setAge = function (age) {
                user_age = age;
            };
            this.getAge = function () {
                return user_age;
            };
        }
        var p1 = new Person('张三');
        p1.setAge(20);
        alert(p1.user_name + '  ' + p1.getAge());

js中的闭包

定义:「函数」和「函数内部能访问到的变量」(也叫环境)的总和,就是一个闭包。
什么是闭包?简单来说,闭包是指可以访问另一个函数作用域变量的函数,一般是定义在外层函数中的内层函数。
为什么需要闭包?局部变量无法共享和长久的保存,而全局变量可能造成变量污染,所以我们希望有一种机制既可以长久的保存变量又不会造成全局污染。
特点:占用更多内存不容易被释放
何时使用?变量既想反复使用,又想避免全局污染如何使用?1.定义外层函数,封装被保护的局部变量。 2.定义内层函数,执行对外部函数变量的操作。 3.外层函数返回内层函数的对象,并且外层函数被调用,结果保存在一个全局的变量中。
闭包是通过作用域链实现的:在这里插入图片描述

参考博客:深度解析js中的闭包

        function func1() {
            var arr = new Array();
            for (var i = 0; i < 10; i++) {
                arr[i] = function () {//在一个函数中能够访问函数外面的变量,这里就产生了一个闭包
                    alert(i);
                };
            }
            return arr;
        }

        var arr = func1();
        for (var i = 0; i < arr.length; i++) {//直到这里执行完了,func1函数中的变量才能够被释放,因为这里执行的函数要使用func1中的i变量
            arr[i]();
        }//结果打印10个10

js中的this表示什么

    function func1() {
        alert(this);//因为直接在页面上定义的函数默认是注册给了window对象,所以直接调用func1()这个函数和window.func1()是一样的。正因为func1()函数是window对象的函数,所以func1()函数内部的this就表示window对象。
        //也就是说,在一个函数内部,this表示的是哪个对象,取决于当前函数是哪个对象的函数。
    }
    func1();//这里的this就表示window对象

    function Person() {
    }
    var p1 = new Person();
    p1.fn = function () {
        alert(this instanceof Person);
    };
    p1.fn();//这里的this就表示p1对象

终止事件的触发

    document.getElementById('btn1').onclick = function () {
        alert('第一次弹窗');
        alert('第二次弹窗');
        return false;//return false语句就是终止事件,所以后面的代码就不会执行了
        alert('第三次弹窗');
    };
js用闭包遍历树状数组的方法 主要介绍了js中用闭包遍历树状数组的方法,需要的朋友可以参考下 立即下载

相关推荐

手把手教你配置MCAL中的CAN模块:从基础参数到实战避坑指南

本文提供了一份详尽的MCAL CAN模块配置指南,涵盖从基础参数设置到实战避坑的全过程。文章深入解析了CAN控制器核心参数、硬件对象配置、数据流处理及常见问题排查,并结合源码分析,帮助嵌入式开发者构建稳定高效的CAN通信链路,是汽车电子领域通信开发的实用参考。

weixin_29165465的博客 336

JS 闭包详解

一、闭包预备知识 1. 举个栗子分析执行上下文 let a = 3 function addTwo(x) { let ret = x + 2 return ret } let b = addTwo(a) console.log(b); // 5 为了理解JavaScript是如何工作的,让我们详细分析一下: 在第1行,我们在全局执行上下文中声明了一个新变量a,并将其赋值为3 接下来,就变得棘手了,第2行到第5行实际上是在一起的,这里发生了什么? 我们在全局执行上下文中声明了一个名为a

2593

第3章 zynq MII转GMII的配置和EMIO UART0的配置

本文介绍了在Vivado工程中实现MII转GMII接口适配的过程,同时配置EMIO UART0接口。主要内容包括:修改PS IP核添加UART0接口,使用concat IP核进行信号整合,调整GMII信号引脚连接,添加约束文件定义引脚映射,并最终生成bit流文件。通过详细的操作截图和TCL约束代码,展示了从硬件配置到生成可编程文件的完整流程,为Zynq平台开发提供了实用参考。

qq_36517072的博客 903

js闭包的理解

学习Javascript闭包(Closure) 作者: 阮一峰 日期: 2009年8月30日 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 下面就是我的学习笔记,对于Javascript初学者应该是很有用的。 一、变量的作用域 要理解闭包,首先必须理解Javasc

soapcoder92的博客 1586

Waymo数据集里的隐藏彩蛋:5个激光雷达数据融合实战(附Python代码)

本文深入解析Waymo数据集中5个激光雷达的数据融合技术,提供Python实战代码,帮助开发者掌握多传感器协同工作的关键方法。通过时间同步、坐标转换和运动补偿等技术,实现高精度3D场景重建,提升自动驾驶系统的环境感知能力。

weixin_30399821的博客 79

STM32F103C8T6 Bootloader开发实战:串口IAP固件升级与Keil工程配置详解

本文详细介绍了STM32F103C8T6 Bootloader开发实战,重点讲解串口IAP固件升级的实现方法与Keil uVision5工程配置。通过Flash分区管理、USART1通信协议设计及应用程序跳转机制等核心技术,帮助开发者掌握嵌入式系统固件升级方案,提升设备维护效率。

weixin_29165725的博客 436

js数组,循环,闭包问题

var markerarray = new Array(); var labelarray = ['武术馆','初中楼B座','初中办公楼','初中楼A座','科技楼','高中楼','实验楼','高中办公楼','综合楼','图书馆文体楼','操场'] var poinntarray = [new BMap.Point(116.333645,39.983996),new BM

源式羽语 866

c语言实现语音检测vad_壹鸽技术科普·智能语音客服系统中的前端语音处理技术...

随着智能客服机器人产业的迅速发展,尤其是伴随着人工智能AI的风潮,预计在2020年我国智能客服市场将达到万亿级别。在智能客服机器人领域中对电话信道语音进行端点检测处理的应用正在不断扩展和深化。目前语音端点检测(Voice Active Detection,简称VAD)的主要任务是准确快速判决出待处理的语音信号有话还是无话,作为自动语音识别(Automatic Speech Recognition,...

weixin_36431018的博客 507

关于js闭包、数组去重那点事儿

项目不忙的时候,写一些js的方法来稳固一下基础,也便于以后来查询。 1.js闭包 // 闭包的理解, // 1.其实就是实现访问功函数内部的局部变量2.其中函数内部的内存不会被垃圾机制回收(garbage collection) // 例1: // function f1() { // var n = 99; // setter = ...

smallico的博客 299

LiveReload:释放你的F5,实时预览HTML效果

一、liveReload插件开发背景Web前端开发人员在写页面时,如果修改了HTML or CSS,要想看效果通常的做法就是保存代码就得 Alt+Tab,切换到浏览器(当然,我知道很多开发人员是双屏操作不一定需要切换到浏览器),但是一定要F5刷新才能看自己刚写的代码有没有效果,没有效果就再切换到编辑器下修改,然后再切换到浏览器F5刷新看效果,还没有效果,就再继续修改,如此反复。时间久了,前端自动化...

Char_n的博客 2506

Opencv项目实战:09 物体尺寸测量

《Opencv项目实战:09 物体尺寸测量》本项目主要是运用了之前扫描文档的思想,以A4纸为背景,检测其中区域的物体长和宽。我的摄像头无法固定,所以是手持的,且由于我在寝室里面是真的没有找到合适的测量物体以及背景色(全是米色或原木色的)。所以效果有所欠缺,但经过ps修改的图片,检测的效果还是很不错的。

m0_62919535的博客 1万+

【JS 函数】JS闭包深入了解

定义 闭包是指有权访问另一个 函数作用域中的变量的函数。 创建方法 创建闭包的常见方式,就是在一个函数内部创建另一个函数。 function createComparisonFunction(propertyName) { return function(object1, object2){ var value1 = object1[propertyName]; var value2 = object2[propertyName]; if (value1 < valu

sinat_33255495的博客 403

华为OD面试手撕真题 【合并相邻且相等的元素】多语言题解

华为OD面试高频手撕真题【合并相邻且相等的元素】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。

qq_45776114的博客 544

JS学习笔记(JavaScript基础学习必备)

讲解JavaScript 基础语法、关键特性、JSON、WebAPI 等知识点。涉及网页窗口交互的方法以及通过 DOM 进行网页元素的相关操作。 文章目录一、JavaScript 基础1.什么是 JavaScript2.JavaScript 范例3.变量4.数字与运算符5.数组概述6.操作数组7.Null 和 Undefined8.字符串9.转换成字符串10.转换成数值类型11.转换成布尔类型二 、JavaScript 关键特性1.条件2.循环3.函数(参数,函数返回值)4.创建函数5.挑战:制作直角三角形

weixin_44009656的博客 5341

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

深入JavaScript之JS引擎如何执行JS代码

我们大概经常能听到“执行环境”、“作用域”、“原型(链)”、“执行上下文”等内容,它们都在描述什么? JS代码的运行 我们知道了js是弱类型语言,在运行时才确定变量类型。js引擎在执行js代码时,也会从上到下进行 词法分析、语法分析、语义分析 等处理,并在代码解析完成后生成AST(抽象语法树),最终根据AST生成CPU可以执行的机器码并执行。 除此之外,JS引擎在执行代码时还会进行其它处理,如 V8 中还有两个阶段: 编译阶段:该阶段会进行执行上下文的创建,包括创建变量对象、建立作用域链、确定 this

flying meng的菜鸟居 5921

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【原生JS】JavaScript 教程教案

摘要: 老曹的 JavaScript 教程教案 提供从基础到进阶的 20 节系统性课程,涵盖语法、DOM 操作、异步编程、ES6+ 新特性等核心内容。课程分为 基础篇(变量、函数、数组、DOM)和 高级篇(闭包、原型链、Promise、模块化),结合实战项目(如待办清单、天气应用)巩固技能。推荐配套书籍《Eloquent JavaScript》和 MDN 文档,并介绍现代工具链(VSCode、Webpack)。适合零基础入门或开发者进阶,最终目标为掌握全栈 JavaScript 开发能力

silverclayz的技术分享 2452

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

02——js基本语法 js面向对象 闭包 数组

摘自传智播客javascript视频的课堂笔记

幺生 1088

【JavaScript】JS高级语法

变量与函数,作用域,定义变量,作用域链,闭包,预解析,let提升,函数参数,箭头函数,解构赋值,数组解构,对象解构,对象,字面量创建对象,构造函数,自定义构造函数,静态成员和实例成员,数据类型,引用类型,Object,Array,RegExp,包装类型,String,Number,Boolean,原型对象,原型链,this指向,普通函数,严格模式,箭头函数,改变函数的this指向,call,apply,bind,class关键字(类),封装,继承,浅拷贝,深拷贝

m0_64538862的博客 2807

JavaScript全流程深度剖析:从基础语法到面向对象

本文全流程梳理了JavaScript的基础语法、流程控制与数组、函数与DOM、面向对象等核心知识,结合流程图与源码分解,归纳设计思想、剖析优缺点、实战技巧、调试优化以及高阶集成与底层实现。掌握JS不仅要会用,更要理解其背后的运行机制和架构演进。“语法灵活巧表达,流程控制逻辑抓;数组函数多链式,DOM交互体验佳;面向对象结构化,底层机制心中画。调试优化常思考,集成高阶见真章。知其然更要知其所以然,才能在复杂业务场景中游刃有余,写出高质量、可维护的JavaScript代码。

IT技术学习与工作笔记分享 1865

JavaScript 基本语法

本文档系统介绍了JavaScript的核心语法,包括基础结构、变量与数据类型、运算符、流程控制、函数、对象、数组、ES6+新特性及错误处理等。重点讲解了JavaScript的动态类型特性、变量作用域、函数声明方式、对象和数组操作,以及ES6引入的箭头函数、解构赋值和模板字符串等新特性。文档采用结构化的目录编排,每个知识点都配有代码示例,适合作为JavaScript语言的快速参考指南。

2401_83194362的博客 1463

JavaScript(JS)的基础语法总结

JavaScript(JS)的基础语法总结

yunAike的博客 1079

【JavaScript】JavaScript初识及基本语法详解

JavaScript 最初由 Netscape 公司的 Brendan Eich 在 1995 年创建,并迅速成为网页开发的核心技术之一。尽管名字中包含 "Java",但 JavaScript 与 Java 语言没有直接关系。JavaScript 通常被归类为一种轻量级的、解释型的、基于原型的脚本语言。JavaScript 是一种功能强大的编程语言,它的灵活性和易用性使其成为网页开发的首选语言。

qq_70814008的博客 1047

JavaScript语法

JavaScript是一门功能强大且应用广泛的编程语言。通过不断学习和实践,你可以掌握其精髓并开发出优秀的Web应用和非Web应用。👨‍💻博主Python老吕评论,您的举手之劳将对我提供了无限的写作动力!🤞🔥《Python全栈工程师》《跟老吕学MySQL》《Python游戏开发实战讲解》🌞《Python全栈工程师·附录资料》《Pillow库·附录资料》《Pygame·附录资料》《Tkinter·附录资料》《Django·附录资料》《NumPy·附录资料》《Pandas·附录资料》

Python老吕的博客 1144

零基础小白如何自学JavaScript(JS)

通过从基础到进阶的学习,你将掌握更多的工具和技巧,能够构建更加复杂和高效的Web应用。参与开源项目不仅能帮助你积累实际经验,还能提高你的编程能力。在掌握了基础的JavaScript后,你可以深入学习一些更高级的概念,这些概念会让你在编写更高效和复杂的代码时更加得心应手。当你掌握了JavaScript的高级特性后,可以开始接触一些前端开发的现代工具和框架,这将帮助你构建更复杂和高效的应用。当你对JavaScript有了较好的掌握之后,可以进一步学习一些前端框架和工具,它们可以帮助你构建更复杂和高效的应用。

小宝哥Code的专栏 2115

JavaScript入门基础语法学习和使用

JavaScript入门基础语法学习和使用1. JS 概述2. JS 输出3. JS 基础语法3.1 js 使用3.2 js 注释3.3 js 类型3.4 js 变量3.5 js 运算符4. JS 引用类型 - 对象4.1 String 字符串对象4.2 Array 数组对象4.3 Date 日期对象4.4 RegExp 正则对象4.6 Functions 全局函数 JS学习资料来源:W3scho...

Hello, New World! 1056

js闭包

就像老Albert所说的,“如果你不能向一个六岁的孩子解释清楚,那么其实你自己根本就没弄懂。”

Hanks-Wang的博客 6540
上一篇: 1.javascript基础-基本语法 变量作用域 匿名函数
下一篇: 3.javascript Dom 获取元素id 动态注册事件 window对象
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值