ECMAScript常用操作有哪些
发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,本篇内容主要讲解"ECMAScript常用操作有哪些",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"ECMAScript常用操作有哪些"吧!ECMA(Eur
千家信息网最后更新 2025年02月08日ECMAScript常用操作有哪些
本篇内容主要讲解"ECMAScript常用操作有哪些",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"ECMAScript常用操作有哪些"吧!
ECMA(European Computer Manufacturers Association)
ECMA(前身为欧洲计算机制造商协会)指定和发布的脚本语言规范JS包含三个部分: 1.ECMAScript(核心) 2.扩展==浏览器端 1.BOM(浏览器对象模型) 2.DOM(文档对象模型) 3.扩展==服务器端 1.NODEES几个重要的版本 ES5:09年发布 ES6(ES2015):15年发布 ES7(ES2016):16年发布前端几个好用的浏览器插件: FE前端助手:可以自动化格式Chrome浏览器的json数据
严格模式:
除了正常运行外(混杂模式),ES5添加了第二种运行模式:"严格模式"(script mode)这种模式使得javascript在更严格的语法条件下运行使用: 在全局或函数的第一条语句定义为:'use script' 如果浏览器不支持,只解析为一条简单的语句,没有任何副作用 语法和行为改变: 必须用var声明变量 禁止自定义的函数中的this指向window 创建eval作用域。会解析传入的字符串,让解析器执行 对象不能有重名的属性
json对象的扩展
1.JSON.stringify(obj/arr) js对象(数组)转换为json对象(数组)2.JSON.parse(json) json对象(数组)转换为js对象(数组)
数组扩展
1.Array.prototype.indexOf(value) -- 得到值在数组中的第一个下标2.Array.prototype.lastIndexOf(value) -- 得到值在数组中的最后一个下标3.Array.prototype.forEach(function(item,index){}) -- 遍历数组4.Array.prototype.map(function(item,index){}) -- 遍历数组返回一个新的数组,返回加工之后的值5.Array.prototype.filter(function(item,index){}) -- 遍历过滤出一个新的子数组,返回条件为true的值 var arr = [2,4,3,1,5,6,7,8]; arr.indexof(2):获取数组中2的下标值 //数组中的每个值都加10 var map = arr.map(function(item,index){ return item+10; }); //过滤大于3的数组 var filter = arr.filter(function(item,index){ return item > 3; })
函数的扩展
1.Function.protorype.bind(obj) 作用:将函数内的this绑定为obj,并将函数返回 call()和apply()的区别: 相同点:都是立即调用函数 不同点:call()传入的参数是一个一个的,apply()传入的参数为数组形式 var obj = {username:'kobe'} function foo(){ console.log(this); } fun(); //此时调用的this为window foo.call(obj);//此时调用的this为object bind()和以上的区别:通常用其指定回调函数的this 绑定完this不会立即调用函数,而是将函数返回。传参方式和call()一样 var bar = foo.bind(obj); bar();//此时调用就是obj这个对象 简化写法:foo.bind(obj)(); 例如: setTimeout(function(){ console.log(this); //此时的this是window对象 },1000); 调用bind函数可以将回调函数指定为特定对象调用 setTimeout(function(){ console.log(this); //此时的this是obj对象 }.bind(obj),1000);
let、const关键字
此处开始是ES6语法:1.let -作用:与var类似,用于声明一个变量 -特点:在块级作用域内有效 不能重复声明 不会预处理,不存在提升 -应用: 循环遍历加监听 使用let取代var是趋势 2.const - 作用:定义一个常量 - 特点:不能修改、其他特点同let一样 - 应用:保存不用改变的数据
变量的解构赋值(对象的解构赋值)
从对象或数组提取数据,并赋值给变量(多个)1.对象解构赋值: let {n,a} = {n:'tom',a:12}; console.log(n,a);2.数组的解构赋值 let [a,b] = [1,'guigu']; console.log(n,a);3.函数的改变 let obj = {username:'kobe',age:39}; function foo({username,age}{ console.log(username,age); }); foo(obj);
模板字符串(简化拼接)
1.模板字符串必须用``(esc下面的那个)包含2.变化的部分用${xxx}定义let obj = {username:'kode',age:39};let str = '我的名字叫做:'+obj.username+',年龄是:'+obj.age;let str2 = `我的名字叫:${obj.username},年龄是:${obj.age}`;对象的简写方式: let username = 'kon'; let age = 39; let obj = { username:username, age:age, getName:function(){ return this.username; } } let obj = { username, // 同名的属性可以不写 age, getName(){ // 可以省略对象函数的function return this.username; } }
箭头函数
1.箭头函数没有自己的this,箭头函数的this不是调用的时候决定的,而是定义的时候处在的对象就是它的 this2.扩展理解: 1.箭头函数的this看外层的是否有函数 如果有,外层函数的this就是内部箭头函数的this, 如果没有,则this就是window let obj = { getName:function(){ //此处如果写箭头函数,那么所指向的是obj,因为箭头函数外层是常规函数 } } let obj = { getName:() =>{ //此处如果写箭头函数,那么所指向的是window,因为箭头函数外层是箭头函数 } } 3.场景 1.没有形参:小括号不能省略 2.只有一个形参:小括号可以省略 let fun2 = a => console.log(a); 3.两个及以上的形参:小括号不能省略 let fun3 = (x,y) => console.log(x,y); fun3(25,36); 4.函数体的情况 1.函数体只有一条语句或者表达式的时候,可以省略{} let fun = (x,y) => x+y; 可以省略return 2.如果有多个语句或者表达式,{}不能省略的 let fun = function(){}简化:let fun = () => console.log('我是箭头函数'); fun();
三点运算符
rest(可变)参数: 作用:用来取代arguments,但比arguments灵活,只能最后部分形参参数 function foo(a,b){ arguments.callee();//调用此函数就等于在foo内部再一次调用自己 } arguments:这是一个伪数组 1.此属性可以获取函数上面的实参的值 2.arguments.callee():代表调用函数自身,代替递归使用 1.function foo(a,b){ console.log(arguments); //获取的数据为【伪数组】,无法使用foreach等方法 } 2.function(...value){ console.log(value);//获取的值为【真数组】,可以使用foreach方法 } foo(2,3); //灵活性改变,如果存在占位符a,那么剩下的数字就会存入到...value数组中 3.function foo(a,...value){ console.log(value); // 10,11,12,13 } foo(3,10,11,12,13);使用三点运算符,可以灵活使一个数组插入另一个数组,默认调用的是iterator接口 let arr1 = [1,6]; let arr2 = [2,3,4,5]; //将arr2插入到arr1中 arr1 = [1,...arr2,6];
形参默认值
function foo(a,b){ this.a = a; this.b = b;}let obj = new foo(); //如果不传入形参,会导致a,b都为underfinedES6提供新的默认形参: function foo(a=0,b=0){ this.a = a; this.b = b; } let obj = new foo();//此时的foo传入的是形参默认值0,0
promise(承诺)
promise对象:代表了【未来】某个将要发生的事件(通常是一个异步操作)。有了promise对象,可以将异步操作以同步的流程表达出来,避免了层层嵌套的回调函数(俗称'回调地狱')ES6的promise是一个构造函数,用来生成promise实例。回调地狱:回调函数如果嵌套多了,会导致耦合度极高,导致不可预期的错误。2.promise对象有三个状态: 1.pending:初始化 2.fullfilled:成功状态 3.rejected:失败状态 let pro = new Promise((resolve,reject)=>{ //这两个形参都是函数!!! //初始化promise状态:pending console.log('111'); //异步操作,通常是发送ajax请求,开启定时器 setTimeout(()=>{ console.log('333'); //根据异步任务的返回结果来去修改promise的状态 resolve('哈哈');//代表异步执行【成功】,修改promise的状态为 fullfilled 成功状态 reject('啦啦'); //代表异步执行【失败】,修改promise的状态为 rejected 失败状态 },3000);});//then里面有两个回调函数,第一个为成功,第二个为失败,里面回调参数data//data参数根据resolve和reject传输的内容来pro.then((data)=>{ //这个函数为成功的回调 console.log(data,'成功了');},(error)=>{ //这个函数为失败的回调 console.log(error,'失败了');});
Symbol
前言:ES5中对象的属性名都是字符串,容易造成重名,污染环境。Symbol: 概念:ES6中添加了一种【原始数据类型】symbol (已有的原始数据类型:String、Number、boolean、null、underfined、对象) 特点: 1.symbol属性对应的值是唯一的,解决命名冲突 2.symbol值不能与其他数据进行计算,包括同字符串拼接 3.for in,for of遍历时不会遍历symbol属性。 4.可以定义常量:用去区别其他数据标识 const Person_key = Symbol('person_key'); 使用: 1.调用Symbol函数得到symbol值 let symbol = Symbol() let obj = {} obj[symbol] = 'hello' 2.传参标识 let symbol = Symbol('one'); console.log(symbol); //Symbol('one') 3.内置Symbol值 除了定义自己使用的Symbol值以外,ES6还提供了11个内置的Symbol值,指向其他语言内部 使用的方法。 Symbol.iterator - 对象的Symbol.iterator属性,指向该对象的默认【遍历器】方法
iterator
概念:iterator是一种接口机制,为各种不同的数据结构提供统一的访问机制作用: 1.为各种数据结构,提供一个统一的、简便的访问接口 2.使得数据结构的成员能够按某种次序排列 3.ES6创造了一种新的遍历命令for...of循环,Iterator接口主要提供for...of消费工作原理: 1.创建一个指针对象(遍历器对象),指向数据结构的起始位置 2.第一次调用next方法,指针自动指向数据结构的第一个成员 3.接下来不断调用next方法,指针会一直往后移动,直到指向最后一个成员 4.每调用next方法返回的是一个包含value和done的对象,{value:当前成员的值,done:布尔值} - value表示当前成员的值,done对应的布尔值表示当前的数据的结构是否遍历结束 - 当前遍历结束的时候返回的value值是underfined,done值为false原生具备iteratro接口的数据(可用for of遍历) 扩展理解: 1.当数据结构上部署了Symbol.iterator接口,该数据就是可以用【for..of】遍历 2.当使用for of去遍历目标数据的时候,该数据会自动去找Symbol.iterator属性 //Symbol.iterator 属性指向指向对象的默认遍历器方法。模拟iterator遍历器:这也是底层的实现function Myiterator() {//模拟指针对象(遍历器对象),iterator接口 let index = 0;//记录指针的位置 return {//遍历器对象 next() { return index < arr.length ? {value: arr[index++], done: false} : {value: undefined, done: true}; } }}let arr = ['wang',2,'abc',5];let mykiss = Myiterator(arr);console.log(mykiss.next());console.log(mykiss.next());console.log(mykiss.next());console.log(mykiss.next());console.log(mykiss.next()); iterator接口部署到指定的【数据类型】上,可以使用for of遍历数组、字符串、arguments(不能用for,each因为是伪数组),set容器,map容器
forEach、for-in与for-of的区别
foreach:方法没办法使用 break 语句跳出循环,或者使用return从函数体内返回for in:总是得到对像的key或数组,字符串的下标,而for of和forEach一样,是直接得到值for of:【在ES6中】,增加了一个for of循环,使用起来很简单,for of不能对象用
Generator函数
Promise依赖于回调函数,所以推出generator概念: 1.ES6提供的解决异步编程的方案之一 2.Generator函数是一个【状态机】,内部封装了不同状态的数据 3.用来生成【遍历器对象】iterator 4.可暂停函数(惰性求值),yield可暂停,next方法可启动。每次返回的是yield后的表达式结果 特点: 1.function与函数名之间有一个【星号】 2.内部用yield表达式来定义不同的状态 例如: function* generatorExample(){ console.log('开始执行'); let result = yield 'hello'; //状态值为hello yield 'generator';//状态值为geneartor let result = yield 'generator'; console.log(result);//此时的结果为underfined,如果在next方法中参入参数 //返回值就是传参内容aaaaa return '返回的结果'; } let MG = generatorExample();//返回的是指针对象 MG.next(); //每调用一次,返回一个yield后面的值 MG.next(); //每调用一次,返回一个yield后面的值 MG.next('aaaaa');//可以传入 3.geneartor函数返回的是【指针对象】,而不是执行函数内部逻辑 4.调用next方法函数内部逻辑开始执行,遇到yield表达式停止, 返回 -- {value:yield表达式后的结果/underfined,done:false/true} 5.再次调用next方法会从上一次停止时的yield处开始,直到最后 6.yield语句返回结果通常为underfined,当调用next方法时传参内容会作为启动时yield语句的返回 值 对象Symbol.iterator属性,指向遍历器对象let obj = {username:'kobe',age:33};//for of无法遍历对象,可以使用generator进行遍历obj[Symbol.iterator] = function* Test(){ yield 1; yield 2; yield 3;}for(let i of obj){ console.log(i);//打印出来的就是yield后面跟的内容}案例:发起ajax请求 function* sendXML(){ let url = yield getNews('http://localhost:3000/news/ID=2'); yield getNews(url); } function getNews(url){ $.ajax(url,function(data){ let commentURL = data.commentUrl; let url = 'http://localhost:3000' + commentURL; //当获取新闻内容成功后,发送请求获取对应的评论内容 //调用next传参会作为上次暂停时yield的返回值 sx.next(url); }) } let sx = sendXML(); //发送请求获取新闻内容 sx.next();
asnc函数详解及应用
ES7的东西概念:真正意义上的去解决异步回调的问题,同步流程表达异步操作本质:Generator的语法糖语法: async function foo(){ await 异步操作; await 异步操作; } 特点: 不需要像Generator去调用next方法,调用await等待,当前的异步操作完成就往下执行 返回的总是Promise对象,可以用then方法进行下一步操作 async取代Generator函数的星号*,await取代Generator的yield 语法上更为明确,使用简单,没有副作用。 案例:发送ajax请求 async function getNews(url){ return new Promise((resolve,reject) => { $.ajax({ method:'GET', url, success:data => resolve(data), error:data => reject() }) }) } async function sendXML(){ let result = await getNews('http://localhost:3000/news?id=7'); result = await getNews('http:localhost:3000' + result.commentUrl); } sendXML();
class类的详用
1.通过class定义类/实现类的继承2.在类中通过constructor定义构造方法3.通过new来创建类的实例4.通过extends来实现类的继承5.通过super来调用父类的构造方法6.重写从父类中继承的一般方法//平常创建对象function Person(name,age){ this.name = name; this.age = age;}let p = new Person('kond',22);//使用class定义类class Person{ constructor(name,age){//定义构造方法 this.name=name; this.age=age; } getName(){//定义一般方法 console.log(this.name); }}let p = new Person('king',33);p.getName();//使用class实现继承class StartPerson extends Person{ constructor(name,age,salary){ super(); this.salary = salary; }}
字符串、数组的扩展
字符串的扩展 1.includes(str):判断是否包含指定的字符串 2.startsWith(str):判断是否以指定字符串开头 3.endsWith(str):判断是否以指定字符串结尾 4.repeat(count):重复指定次数 数值的扩展 1.二进制与八进制数值表示法:二进制用0b,八进制用0o console.log(0b1010); //代表十进制10 2.Number.isFinite(i):判断是否是有限大的数 3.Number.isNaN(i):判断是否为NAN 4.Number.isInteger(i):判断是否是整数 5.Number.parseInt(str):将字符串转换为对应的数值 Number.parseInt('123abc') //123 6.Math.trunc(i):直接去除小数部分 数组的扩展: 1.Array.from(v):将伪数组对象或可遍历对象转换为真数组 2.Array.of(v1,v2,v3):将一系列值转换为数组 let arr = Array.of(1,2,'abc',true); 3.find(function(value,index,arr){return true}):找出第一个满足条件true的元素 let arr2 = [2,3,4,5,6,7,8]; let result = arr2.find(function(item,index){ return item > 4; }) 4.findIndex(function(value,index,arr){return true}):找出第一个满足条件返回true的 元素的下标 对象方法扩展: 1.1.Object.is(v1,v2):判断2个数据是否完全相等 0 == -0 // true NaN == NaN //false Object.is(0,-0) //false 底层比较的是字符串数值 Object.is(NaN,NaN) //true 2.Object.assign(target,source1,source2):将源对象的属性复制到目标对象上 let obj = {} let obj2 = {username:'zhang',age:22} Object.assign(obj,obj2); 3.直接操作__proto__属性 let obj2 = {} obj2.__proto__ = obj1;
深度克隆
基本数据类型拷贝: 拷贝后会生成新的数据,修改拷贝以后的数据不会影响原数据 对象/数组拷贝: 拷贝后不会生成新的数据,而是拷贝引用。修改拷贝以后的数据会影响拷贝数据的方法: 1.直接赋值给一个变量 //浅拷贝 2.Object.assign() //浅拷贝 3.Array.prototype.concat() //浅拷贝 4.Array.prototype.slice() //浅拷贝 5.JSON.parse(JSON.stringify) //深拷贝!!! 浅拷贝: 拷贝的引用,修改拷贝以后的数据会影响原数据深拷贝: 拷贝的时候生成新数据,修改拷贝以后的数据不会影响原数据
set、map容器
1.Set容器:无序不可重复的多个value的集合体 set() set(array) add(value) delete(value) has(value) clear() size()2.Map容器:无序的key不重复的多个key-value的集合体 Map() Map(array) set(key,value) //添加 get(key) delete(key) has(key) //判断是否存在 clear() size let set = new Set([1,2,3,3,4,5,6]);set.add(7);let map = new Map([['aaa','username'],[36,age]])map.set(78.'haha');map.delete(78);for of循环: 1.遍历数组 2.遍历set 3.遍历map 4.遍历字符串 5.遍历伪数组
到此,相信大家对"ECMAScript常用操作有哪些"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
函数
对象
数据
数组
方法
拷贝
字符
字符串
状态
属性
指向
箭头
内容
形参
接口
成功
作用
参数
就是
指针
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
中国移动网络安全员一个月挣多少
ACcess做局域网数据库
网吧网络安全大检查
网络安全宣传海报艺术字的写法
服务器故障代表什么意思
网络安全实现
黄石市网络安全信息中心在哪里
省考网络安全岗位考试题
河南农业职业学院网络技术好吗
航天宏图软件开发
北京财小神网络技术怎么样
深圳数字软件开发定做价格
网络安全工作基本原则
河北通用软件开发价格表
网络安全的初心和使命
软件开发时间推进表
fmdb 删除多条数据库
华师的网络安全和信息安全
政府机关做好网络安全文章
zka服务器
各国网络安全管理体制
网络安全产品单选题
会计记帐软件开发
一张图看懂服务器市场规模
华为软件开发流程几个字母
上位软件开发
护苗网络安全课堂3
广东刀片服务器虚拟主机
服务器防护参数
灵璧高一软件开发课程