get和set方法(对属性进行方法的绑定):得到一个动态变化的值,里面为属性不是方法,set先执行,要接受一个参数,get返回一个
class Phone{ get price(){ console.log("价格属性被读取了") return "hhh" } set price(price1){ console.log("价格属性被修改了") }//要返回一个参数 } let s=new Phone(); s.price=122; // console.log(s.price)
--------------------------------------------------------------------------------------------------------------
数值扩展:
Number.EPSILON表示最小精度,一个数小于最小精度,认为它和这个数相等,用在浮点数运算上面,有误差
function fun(a,b){ if(Math.abs(a-b)<Number.EPSILON){ return true; } else{ return false; } } console.log(0.1+0.2===0.3); console.log(fun((0.1+0.2),0.3))
// 因为a,b都是浮点数所以不相等,用这个方法让差值小于最小数,则把它们看作相等,是我们自己把这两个数设置为相等,它们本质上是不相等的
Number.isFinite检测一个数是否为有限数:
console.log(Number.isFinite(100));//true
console.log(Number.isFinite(100/0))//false
console.log(Number.isFinite(Infinity));//false
NNumber.isNaN检测一个数是否为NaN
console.log(Number.isNaN(100));//false
将字符串转化为整数
let a="123"
console.log(parseInt(a)+2);125
console.log(parseFloat(a)+3);126
console.log(parseInt("124das"))//自动截断数字
判断一个数是否为整数:isInteger
console.log(Number.isInteger(2.2))//false
取整:Math.trunc
console.log(Math.trunc(12.321))//12
判断正负:Math.sign,正为一,负为-1,0为0
console.log(Math.sign(100));//1
console.log(Math.sign(-21));//-1
console.log(Math.sign(0));//0
-----------------------------------------------------------------------------------------------------------
对象方法扩展:
1.判断两个值是否完全相等objec.is
console.log(Object.is(123,321));
// 2.合并对象 object.assign
const a={
name:"hh",
age:12,
sex:"男",
cl:3
}
const b={
name:"ww",
age:11,
sex:"女"
}
2. 取并集,后边的属性会覆盖前边同名属性
console.log(Object.assign(a,b));
3.object.setprototypeof:设置原型对象
const c={ dress:"眉山" } const d={ school:"锦江学院" } Object.setPrototypeOf(c,d); console.log(Object.getPrototypeOf(c)); console.log(c);
--------------------------------------------------------------------------------------------------------
模块化:模块化是一个大的程序文件,拆分成许多小的文件然后组装起来
好处:防止命名冲突,代码复用(把功能代码封装成一个方法提供一个接口),高维护性(修改文件不会冲突,便于升级)
模块功能主要由两个命令构成:export(规定模块的对外接口,哪些数据需要暴露),import(输入其他模块提供的功能)
1.分别暴露 export let name="xxx"
export let name="wxy";
export function fun(){
console.log("这是一个mokuai");
}
2.统一暴露(语法:export{name1,name2})
let name2="wxy2";
function fun2(){
console.log("这是统一暴露模块")
}
export{name2,fun2}
3.默认暴露,如果想要调用方法,要 在对象后面加defaul.方法名
export default{
// 可以暴露任何数据类型
name3:"wxy3",
fun3:function(){
console.log("这是默认暴露");
}
}
import * as a from "./mkh.js";//这里的a大概是个对象?
console.log(a);
console.log("hh");
a.fun();
console.log(a.name);
a.default.fun3();//调用
引入模块
1.通用的模块导入
import * as 变量 from "./xxx.js"
变量.属性/方法()[这里的变量大概是个对象]
2.解构赋值形式,暴露属性名,然后直接打印:import{变量1,变量2} from"./xx.js"
import{name,fun} from "./mkh.js"
import{name as name2,fun2} from "./mkh.js"
console.log(name);
import{default as name3} from "./mkh.js"
fun();//注意:如果在引入不同模块时出现了相同的变量名时,可以import{变量 as 新的变量名 ,变量2}from "./xxx.js"
3.默认暴露引入:import 变量n from "./xxx.js",仅针对默认暴露形式
另一种模块引入形式:因为HTML文件中存在大量代码,所以可以将模块打包在另一个模块中,然后再在HTML代码引入新打包的模块,注意:要写在末尾
---------------------------------------------------------------------------------------------------
模块代码化转换:之前在HTML中直接引入,但不是每款浏览器都支持兼容性,所以要转化【工作中遇到问题再补】