2、函数、对象、对象方法函数的使用、扩展运算符、箭头函数

一、函数

1、数字类型的用法

带Number的先判断是不是数字类型

Number.isNaN() 判断是否 是非数值

  • 非数值返回 true
  • 数值类型返回 false
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN(false)); // false
console.log(Number.isNaN(null)); // false
console.log(Number.isNaN(undefined)); // false
console.log(Number.isNaN(2)); // false

Number.inFinite() 判断是非无穷 (有限的)

  • 有限的 true 无穷的 false
console.log(Number.isFinite(2.1231)); // true
console.log(Number.isFinite('2.1231')); //  false
console.log(Number.isFinite(Math.PI)); // true **
console.log(Number.isFinite(-Infinity)); // false
console.log(Number.isFinite(3.000000000)); // true
console.log(Number.isFinite(null)); // false
console.log(Number.isFinite(true)); // false

Number.parsetInt() 返回整数

Number.parseInt == parseInt

console.log(Number.parseInt('12.12312')); // 12
console.log(Number.parseInt(12.12312)); // 12
console.log(Number.parseInt(null)); //   NaN
console.log(Number.parseInt(undefined)); //  NaN
console.log(Number.parseInt('1.23')); // 1

Number.isInteger() 用来判断是否是整数

console.log(Number.isInteger(1)); // true
console.log(Number.isInteger('1')); // false
console.log(Number.isInteger(1.2222)); // false
console.log(Number.isInteger(null)); // false
console.log(Number.isInteger(undefined)); // false
console.log(Number.isInteger(1.0000000000)); // true

Math.trunc() 用于去除一个数的小数部分,返回整数部分

会隐式转换

console.log(Math.trunc(1.63214)); // 1
console.log(Math.trunc('1.23214')); // 1
console.log(Math.trunc(null)); // 0
console.log(Math.trunc(undefined)); // NaN
console.log(Math.trunc(1.00000)); // 1

Math.sign()用来判断一个数到底是正数、负数、还是零

  • 正数返回1 负数返回-1 零返回0 非数值返回NaN
console.log(Math.sign(1.12321)); // 1
console.log(Math.sign(-1.12321)); // -1
console.log(Math.sign(0)); //0 
console.log(Math.sign(null)); // 0
console.log(Math.sign(true)); // 1
console.log(Math.sign(undefined)); // NaN

二、对象

1、对象的使用(3条)

let s ="say"
let h = 'hello'
let name = 'zs'
let obj = {name,age: 18,say() {//可以省略functionconsole.log("说话了");},[s + h](){//表达式可以当作属性console.log("sayHello");}
}
console.log(obj);//{name: 'zs', age: 18, say: ƒ}
obj.sayhello()//sayHello
  • 删除对象中的属性 delete
    • delete obj.age

2、对象的方法(6条)

Object.is() 比较两个值是否严格相等,或者是全等

console.log(Object.is(10, 10)); // true
console.log(Object.is(10, '10')); //false
console.log(Object.is(NaN, NaN)); // true

Object.assign(目标对象,源对象…) **

  • 函数作用:将源对象的属性赋值到目标对象上
  • 目标对象会改变 源对象不会改变
var obj1 = { a: 1, b: 2,}
var obj2 = { c: 3, d: 4 }
var obj3 = { a: 6, e: 5 }
let obj4 = Object.assign(obj1, obj2, obj3) //跟obj1一样
console.log(obj1);//{a:6 b:2 c:3 d:4  e:5}  目标函数会改变
console.log(obj2);//{c:3 d:4} 源函数不会改变
  • 对象深拷贝
let obj5 = Object.assign({}, obj3)
obj3.a = 8
console.log(obj3);//{a:8 e:5}
console.log(obj5);//a:6 e:5

Object.getPrototypeOf()

  • 函数作用:获取一个对象的prototype属性
function Person() { }//构造函数
Person.prototype.name = 'zs'//原型
Person.prototype.age = 18//原型
var p1 = new Person()//实例化
console.log(Object.getPrototypeOf(p1));//{name: 'zs', age: 18}

Object.setPrototypeOf()

  • 函数作用:设置一个对象的prototype属性
  • 原型的指向会发生改变
Object.setPrototypeOf(p1, {color: 'red'
})
console.log(Object.getPrototypeOf(p1));//{color: 'red'}

Object.keys()

  • 函数作用:获取对象中的属性名、
var obj3 = { a: 6, e: 5}
console.log(Object.keys(obj3));//['a', 'e']

Object.values()

  • 函数作用:获取对象中的属性值
var obj3 = { a: 6, e: 5}
console.log(Object.values(obj3));//[6, 5]

三、函数的使用

1、初始化

2、||

  • 相当于 if ()
  • 如果运算符 || 左侧为true,直接返回左侧的值,否则返回右侧的值
function fn(age) {var age = age || 20console.log(age)
}
fn(false) // 20  
fn(null) //  20  
fn(true) // true 
fn(undefined) // 20  
fn(0) // 20 
fn(1) // 1 

3、??

除了null 和undefined其他传过来的都是直接执行

function fn(age) {var age = age ?? 20console.log(age);
}
fn(false) // false
fn(null) // 20
fn(true) //  true
fn(undefined) // 20
fn(0) // 0
fn(1) //  1

例子:

function fn1(name) {// var name = 'zs'  形参相当于var了一个  不能重复let name = 'ls'console.log(name);
}
fn1('zs')//程序会报错

4、扩展运算符 …

(1)、数组(6条)

遍历数组
var arr = [1, 2, 3, 4]
console.log(...arr);//1 2 3 4
console.log([...arr]);//[1 2 3 4]
当作数组中元素
var arr = [1, 2, 3, 4]
var arr1 = [0, ...arr]
console.log(arr1);// [0, 1, 2, 3, 4]
数组深拷贝
var arr = [1, 2, 3, 4]
var arr_2 = [...arr]
arr.unshift(5)//数组开头添加元素5
console.log(arr);//[5, 1, 2, 3, 4]
console.log(arr_2);//[1, 2, 3, 4]
函数的调用
var arr_1 = [0, 1, 2, 3, 4]
function fn(a, b, c) {console.log(a, b, c);
}
fn(arr_1[0], arr_1[1])//0 1 undefined
fn(...arr_1)//0 1 2
与解构赋值连用
var arr = [1, 2, 3, 4]
var [x, y, z] = [...arr]
console.log(x, y, z);//1 2 3
将伪数组转为真正数组
var str = '是web31'
console.log(Array.from(str));//['是', 'w', 'e', 'b', '3', '1']
console.log([...str]);//['是', 'w', 'e', 'b', '3', '1']

(2)、对象

遍历对象
  • 要加 { }
var obj = {name: "zs",age: 18
}
console.log({ ...obj });//{name: 'zs', age: 18}
对象深拷贝
var obj = {name: "zs",age: 18
}
var obj_1 = { ...obj }
delete obj.age
console.log(obj);//{name: 'zs'}
console.log(obj_1);//{name: 'zs', age: 18}
合并
var a = { a: 1, b: 3 }
var b = { b: 2, ...a, }
console.log(a); //{a: 1, b: 3}  会覆盖前面的
console.log(b);//{b: 3, a: 1}

四、箭头函数(重点)

1、箭头函数格式

  • 去掉function ()后面写 =>
var fn_1 = (name) => {console.log(name)//ls
}
fn_1("ls")

补充:

  • 定时器函数打印出来是数字类型
let setInterval1 = setInterval(function () {
}, 1000)
console.log(setInterval1);//1
  • map也可以写成箭头函数
let arr = [1, 2, 3]
arr.map(function (item, index) {
})
arr.map((item, index) => {
})

2、箭头函数的特点(7条)

箭头函数只有一个参数可以省略小括号

var fn = x => {console.log(x)//10
}
fn(10)

箭头函数返回值只有一条语句可以省略return和 {}

// var fn_1 = (y) =>{ return y }
var fn_1 = y => y
console.log(fn_1(20))//20

箭头函数没有内置对象 arguments

var fn_2 = function () {console.log(arguments);//可以输出
}
fn_2()
var fn_2 = () => {console.log(arguments) //会报错 arguments is not defined
}
fn_2()

箭头函数不能是构造函数

//正常函数
var Person = function () { }
console.log(Person.prototype);//{}
var p1 = new Person()
console.log(p1);//Person {}
//箭头函数
var Person = () => { }
console.log(Person.prototype)//undefined
var p1 = new Person()
console.log(p1); // 会报错 Person is not a constructor

箭头函数的this不能发生改变,call() 和 apply() 能调用箭头函数

//正常的
var obj = { age: 18 }
var fn_3 = function () { console.log(this); }
fn_3() //window
fn_3.call(obj) //{age: 18}
fn_3.apply(obj) //{age: 18}
//箭头函数
var fn_3 = () => { console.log(this); }
fn_3()//window
fn_3.call()//window
fn_3.call(obj)//报错
fn_3.apply(obj)//报错

箭头函数没有原型对象 (prototype原型)

var Person = () => { }
console.log(Person.prototype)//undefined

箭头函数的this指向父作用域 (定义他的地方)

var birth = 2000
var obj = {birth: 1990,getAge: () => { //因为是箭头函数  所以指向父作用域  window 2000var fn = function () {return new Date().getFullYear() - this.birth;// 2024 - 2000};return fn();}
};
console.log(obj.getAge());//24

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/728069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【uni-app小程序开发】实现一个背景色渐变的滑动条slider

最近做的一个用uni-app+vue2开发的微信小程序项目中要实现一个滑动进度控制条,如下图所示: 1. 滑动条需要渐变背景色 2. 滑块的背景色需要与当前位置滑动条的背景色一致(动态改变) 碰到这样的需求,我当然先是看看官方提供的slider组件和uView里的u-slider组件能不能满足…

Javaweb之Web后端开发总结的详细解析

4. Web后端开发总结 到此基于SpringBoot进行web后端开发的相关知识我们已经学习完毕了。下面我们一起针对这段web课程做一个总结。 我们来回顾一下关于web后端开发,我们都学习了哪些内容,以及每一块知识,具体是属于哪个框架的。 web后端开…

nyist_acm 个人积分赛1(部分题解会补充)

Mirrored String II 看到题解说是马拉车算法,我赛时并没想到(好吧其实我是比赛完才知道有马拉车这个算法) 因为字符串的长度只有1000,直接暴力跑其实就可以了,但是要注意的是;回文串有俩种形式&#xff0c…

FreeMarker的原理

FreeMarker是一个Java库,用于生成文本输出(如HTML网页、电子邮件、配置文件、源代码等),基于模板和传递给模板的数据。它通常被用作Web应用程序的视图层,以生成动态HTML内容。FreeMarker的设计理念是将页面设计&#x…

Jenkins中构建vue项目过程中vite进程被终止(kill),导致vue项目构建失败

jenkins的部分构建日志如下: [33mThe CJS build of Vites Node API is deprecated. See https://vitejs.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details.[39m 16:37:44 [36mvite v5.0.5 [32mbuilding for production...[36m[39m …

Python学习DAY12_网络应用

网络应用 发送电子邮件 即使在通信软件如此发达的今天,电子邮件仍然是互联网上使用最为广泛的应用之一,公司向应聘者发出录用通知、网站向用户发送一个激活账号的链接、银行向客户推广它们的理财产品等几乎都是通过电子邮件来完成的,而这些任…

Java必须掌握的多态的优势和弊端(含面试大厂题含源码)

在面试中,了解一个概念的优势和弊端可以帮助面试官判断应聘者对该概念的深入理解程度以及能否在实际开发中合理运用。下面是一个围绕Java多态优势和弊端的面试题,旨在评估应聘者对多态在实际编程中应用的理解。 面试题: Java多态的优势和弊端 请解释Ja…

1. Gin框架入门

文章目录 一、Gin框架介绍二、RESTful API三、Gin渲染1. HTML渲染2. 自定义模板函数3. 静态文件处理4. 使用模板继承5. 补充文件路径处理6. JSON渲染7. XML渲染8. YMAL渲染9. protobuf渲染 四、Gin获取各种方式传递过来的参数1、获取querystring参数2、获取form参数3、获取path…

Vue3实现页面跳转功能

目标: 首页: 点击About后: 第一步:安装 Vue Router和创建你先 npm install vue-router4第二步:在router.js中设置路由 import { createRouter, createWebHistory } from vue-router; import Home from ./views/Home…

如何写一份简单的产品说明书,教程奉上

如果你是一位新晋产品经理,或者正在研发新产品,并且心中惴惴不安因为未知的产品说明书制作环节,那么今天你就来对地方了。本篇文章将教你如何创建一份简单明了的产品说明书。让我们开始吧! 首先,明确产品说明书的目标。…

达梦数据库基础操作(二):表空间操作

达梦数据库基础操作(二):表空间操作 1. 表空间操作 1.1 达梦表空间介绍 表空间的概念: 每个DM 数据库都是由一个或者多个表空间组成,表空间是一个逻辑的存储容器,它位于逻辑结构的顶层,用于存储数据库中的所有数据&am…

【CSP试题回顾】201503-3-节日

CSP-201503-3-节日 关键点:格式化输出 在C中,格式化输出通常利用iostream库中的功能,特别是iomanip头文件提供的一系列操作符。这些操作符用于控制输出格式,如宽度、填充、对齐方式等。在你提供的代码中,用于格式化输…

基于Springboot+Layui餐厅点餐系统

一、项目背景 在互联网经济飞速发展的时代,网络化企业管理也在其带领下快速兴起,开发一款自主点餐系统会受到众多商家的青睐。现如今市场上的人力资源价格是非常高昂的,一款自主点餐系统可以减少餐厅的人力开销,将服务员从繁忙的…

RESTful接口规范参考

介绍 REST(Representational State Transfe),一种架构设计风格,而不是强制标准,主要用于客户端与服务端接口规范;在现代的软件开发中,RESTful API已经成为应用程序之间通信的重要桥梁&#xff…

【Java】小白友好的Javassist源代码级别常用API学习笔记

目录 介绍 Javassist&ASM? Javassist关键类 常用方法 ClassPool 的常用方法 CtClass 的常用方法 CtMethod 的常用方法 CtField 的常用方法 补充 setSuperclass in Javassist constructor in Javassist toBytecode in Javassist Javassist实现TemplatesImpl恶…

电磁兼容EMC:单、双面板的均匀传输线

目录 1 传输线 2 均匀传输线 3 特征阻抗 4 应用案例 为何要讲单、双面板的均匀传输线?因为均匀传输线能保证信号质量,减少EMC问题,而单双面板没有完整的地和电源平面,很难实现均匀传输线的布线,所以更需要知道如何在…

[数据集][图像分类]玉米叶子病害分类数据集9145张4类别

数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):9145 分类类别数:4 类别名称:["cercospora_leaf_spot gray…

08 |「Fragment 」

前言 实践是最好的学习方式,技术也如此。 文章目录 前言一、简介1、是什么2、为什么要有 Fragment3. Fragment 详细解释 二、Fragment 与 Activity 的直观理解三、Fragment 的创建1、Fragment 的创建方式2、Fragment 的增删替查1) 替换(常见&…

01背包问题 刷题笔记

思路 dp 用f[i][j]来表示当体积为j时 考虑前i件物品可以获得的 最大值 记住f[i][j]本身是个价“价值” 考虑两种状态 是否将第i件物品放入背包里面 将背包的体积从小到大递增来进行考虑 首先 考虑条件 如果当前增加的体积放不下下一件物品 则该体积 可以获得的最大值可以直接…

[剪藏] - 教育系统的成功

我在国内并没有系统地学习语音,在英国也未能成功,现在美国我确定我已经行驶在轨道上了(即使未来的作业分数及格或不及格)。 我反思有这么几点: 1. 美国紧扣系统的教材,不是老师自由发挥。教材是知识精英们…