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

03-JavaScript高阶( 代码)

目录

01-数组的操作方法

02-call,apply,bind方法改变this指向

03- call,apply,bind方法的使用场景

04-constructor判断数据类型

05-create继承

 

 

 


01-数组的操作方法

 <script>var arr = [1, 2, 3, 2, 4, 5, 5, 1, 6, 7, 8, 9];// for (var i = 0; i < arr.length; i++) {//     console.log(arr[i]);// }// 1.forEach() 遍历数组// arr.forEach(function (value, index, arr) {//     // 遍历的元素//     // console.log(value);//     // 索引//     // console.log(index);//     // console.log(arr);// });// 2.map() 遍历数组// var newArr = arr.map(function (value, index, arr) {//     // return返回值//     return value + "map";// });// console.log(newArr);// 3.filter() 过滤数组// var newArr = arr.filter(function (value, index, arr) {//     return value % 2 == 0;// });// console.log(newArr);// var data = ["小米14", "iphone 15", "小米12", "huawei Mate60", "huawei P60"];// var huawei = data.filter(function (value, index, arr) {//     return value.includes("huawei")// });// console.log(huawei);// 4.some() 数组中 是否有满足条件的元素true false; 一旦发现满足条件的元素,后面的将不再被遍历// var res = arr.some(function (value, index, arr) {//     console.log(value);//     return value > 5;// });// console.log(res);// 5.every() 数组中每个元素是否都符合条件; 一旦发现不满足条件的元素,后面的将不再被遍历// var res = arr.every(function (value, index, arr) {//     console.log(value);//     return value < 5;// });// console.log(res);// 6.find() 找一个满足条件的值; 一旦找到符合条件的元素,立即返回,后面不再遍历;找不到返回 undefined// var res = arr.find(function (value, index, arr) {//     console.log(value);//     return value > 5;// });// console.log(res);// 7.reduce() 累加器    total作为上次操作的结果// var sum = arr.reduce(function (total, value, index, arr) {//     console.log(total);//     return total + value;// },0)// console.log(sum);// 数组去重// var resArr = arr.reduce(function (total, value) {//     console.log(total);//     if (total.includes(value)) {//         return total;//     } else {//         total.push(value);//         return total;//     }// }, []);// console.log(resArr);// 数组元素累乘var res = arr.reduce(function (total, value) {return total * value;}, 1);console.log(res);</script>

02-call,apply,bind方法改变this指向

     <script>var num = 10;function fun(a, b) {console.log(this);// 普通函数 this 指向 window console.log(this.num + a + b);}var obj = {num: 20}fun(1, 2);// Function.prototype.call()// call() 改变this 指向,参数以 逗号 分割,会立即调用函数执行fun.call(obj, 1, 2);</script><script>var num = 10;function fun(a, b) {console.log(this);// 普通函数 this 指向 window console.log(this.num + a + b);}var obj = {num: 20}fun(1, 2);// Function.prototype.apply();// apply() 改变this 指向,参数以数组形式传递,立即调用函数执行fun.apply(obj, [1, 2]);</script><script>var num = 10;function fun(a, b) {console.log(this);// 普通函数 this 指向 window console.log(this.num + a + b);}var obj = {num: 20}fun(1, 2);// Function.prototype.bind()// bind() 改变 this 指向,参数以逗号隔开,不会立即调用函数执行,需要手动调用fun.bind(obj, 1, 2)();// call()  apply()  bind()// 相同点:都可以改变 this 指向// 不同点:call() apply()之间,都会立即调用函数执行,call()的参数以逗号分隔,apply()的        参数以数组形式传递//        call() bind()之间,参数都以逗号分割,call()会立即调用函数执行,bind()需要手动调用</script>

03- call,apply,bind方法的使用场景

     <script>// 数据类型的判断// 最精准的判断方法// Object.prototype.toString.call();var obj = {};var arr = [];var date = new Date();var num = 10;console.log(Object.prototype.toString.call(obj));   // "[object Object]"console.log(Object.prototype.toString.call(arr));   // "[object Array]"console.log(Object.prototype.toString.call(date));   // "[object Date]"console.log(Object.prototype.toString.call(num));   // "[object Number]"</script><script>// apply() 参数以数组形式传递,立即调用函数执行// Math.max() 传入参数的最大值console.log(Math.max(2, 3, 5, 7, 1, 7, 9, 0, 4, 7));var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];// 求数组中的最大值最小值console.log(Math.min.apply(Math, arr));</script><body><button>点击</button><button>点击</button><button>点击</button><button>点击</button><button>点击</button><script>// bind() 不会立即调用函数执行,一般用于改变定时器中的this 指向// 循环绑定事件var btn = document.querySelectorAll("button");for (var i = 0; i < btn.length; i++) {btn[i].onclick = function () {var time = 5;this.disabled = true;this.innerHTML = "请" + time + "s之后再次点击";this.timeId = setInterval(function () {console.log(this);if (time > 1) {time--;// this this.innerHTML = "请" + time + "s之后再次点击";} else {// this this.removeAttribute("disabled");this.innerHTML = "点击";clearInterval(this.timeId)}}.bind(this), 1000)}}</script>

04-constructor判断数据类型

 <script>var num = 10;// console.log(num.constructor);console.log(num.constructor == Number);var arr = [];console.log(arr.constructor == Array);// null  undefined 不能用constructor判断数据类型// 判断数据类型的方法// typeof instanceof Object.prototype.toString.call() constructor</script>

05-create继承

<script>// Object.create() 继承var father = {money: 20000}var son = Object.create(father, {name: {enumerable: true,writable: true,configurable: true,value: "小张"}});console.log(son);</script>

 

 

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C语言—指针(2)
  • 结合量子技术解决数据传输安全
  • Flink 单机部署
  • 利用ce修改器进行漏洞挖掘(内存修改)
  • AI在医学领域:谷歌的HeAR生物声学模型
  • SQL Server事务日志文件过大的处理方法
  • 以简单的例子从头开始建spring boot web多模块项目(二)-mybatis简单集成
  • 运维-1.日志
  • 保姆级-C#与Halcon的窗体界面展示阈值分割图像教程(机器视觉保姆级教程)
  • 献给正在挣扎中的技术人!
  • Linux设置内网时间同步
  • C语言offsetof宏
  • Sublime Text 配置 Terminal (CMD)
  • 查看和访问信号记录数据
  • 【C语言】循环
  • [译]如何构建服务器端web组件,为何要构建?
  • CAP理论的例子讲解
  • Git学习与使用心得(1)—— 初始化
  • HTTP中的ETag在移动客户端的应用
  • java 多线程基础, 我觉得还是有必要看看的
  • js中forEach回调同异步问题
  • Laravel核心解读--Facades
  • leetcode386. Lexicographical Numbers
  • LeetCode算法系列_0891_子序列宽度之和
  • Lsb图片隐写
  • Markdown 语法简单说明
  • Node 版本管理
  • PV统计优化设计
  • Python - 闭包Closure
  • Spring声明式事务管理之一:五大属性分析
  • Terraform入门 - 1. 安装Terraform
  • Travix是如何部署应用程序到Kubernetes上的
  • vue学习系列(二)vue-cli
  • yii2中session跨域名的问题
  • 编写高质量JavaScript代码之并发
  • 初探 Vue 生命周期和钩子函数
  • 力扣(LeetCode)357
  • 马上搞懂 GeoJSON
  • 如何解决微信端直接跳WAP端
  • 设计模式走一遍---观察者模式
  • 思否第一天
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​马来语翻译中文去哪比较好?
  • # .NET Framework中使用命名管道进行进程间通信
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #mysql 8.0 踩坑日记
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (函数)颠倒字符串顺序(C语言)
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (学习总结16)C++模版2
  • (一)基于IDEA的JAVA基础10
  • (转)Oracle 9i 数据库设计指引全集(1)