JS基础

Posted sheep2

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS基础相关的知识,希望对你有一定的参考价值。

个人总结

关于delete

  • 在严格模式下,无论变量有没有被声明,都不能删除变量,会报错:delete是不合格的标识符
  • 在非严格模式下
    • 全局对象(window)的属性,是可以被删除的,如果删除后打印,会报错:not defined
    • 而声明了的变量,是无法删除的

break 和 continue

list: {
    for (let i=0; i<10; i++) {
	if (i === 5) break        //1 2 3 4
     // if (i === 5) continue     //1 2 3 4 6 7 8 9 
	console.log(i)
    }
}
  • break:可以跳出本次循环
  • continue:跳过本次循环执行继续循环(如果有的话)
list: {
    console.log(1)
    console.log(2)
    console.log(3)
    break list	//输出1 2 3
    console.log(4)
}
  • 当然,也可以利用label标记JS代码语句
    • break 可以跳出任何带标签标记的代码块
    • continue不能跳出带标签的代码块,只能用在循环中

typeof

console.log( typeof {} )	//object
console.log( typeof [] )	//object
console.log( typeof null )	//object 
  • 数组是一种特殊的对象类型
  • null表示值为空,也是一种特殊的对象类型,但不等同于{}空对象
let obj = null
  • 我们可以给一个不立即赋值使用的对象时,可以通过设置null值来初始化对象
console.log(typeof undefined)        //undefined
console.log(null == undefined)       //true
console.log(null === undefined)      //false
  • undefined表示一个没有设置值的变量,比如只声明不赋值时,变量值就是undefined
  • null和undefined值相等,但是类型不同
    • null用于对象,undefined用于变量,属性和方法

js代码类型

  • 数据类型
    • string
    • number
    • object
    • array
    • function
  • 不包含值的数据类型
    • null
    • undefined
  • 对象类型
    • Object
    • Array
    • Date

类型转换

  • 转换为布尔值
    • NaN,0,false,null,undefined,"", 这些为false
    • 其他的都为true,包括-infinity
  • 转换为数字
    • 布尔值:true为1,false为0
    • 字符串:
      • 纯数字字符串:转换后为其包含的数字,"110"就为110
      • 不是纯数字字符串:值为NaN
      • 空字符串:值为0
    • 数字:
      • infinity为infinity,-infinity为-infinity
      • NaN为NaN
    • 数组:
      • 空数组:值为0
      • 数组中只包含一个数字:只为所包含的数字,[20]就为20
      • 数组中包含了多个值:值为NaN
    • 函数:值为NaN
    • 对象:值为NaN
    • null:值为0
    • undefined:值为NaN

错误捕捉

let x = NaN
try {
    if (isNaN(x)) throw "值为NaN"
}
catch(err) {
    console.log(`错误是:${err}`)
}
finally {
    console.log(‘执行完毕~~‘)
}

/*
错误是:值为NaN
执行完毕~~
*/
  • try:要测试的代码
  • throw:创建或抛出异常
  • catch:如果try出错,将throw的错误信息通过参数传入,然后这里处理错误信息
  • finally:在try和catch之后,无论是否发生错误都会执行代码

精度问题

  • 浮点数精度问题:0.1 + 1.2 != 0.3,实际上等于 0.30000000000000004
  • toFixed() 精度不准确问题, 1.335.toFixed(2) == 1.33
  • 类似的问题解决方案:
    • 如果不是用于金额交易,核心方案就是先放大倍数再缩小倍数
    • 如果用于金额方面,或者数字位数较大,还是用一些专门解决精度问题的第三方库
const a = 1.335
console.log((1.335 * 100).toFixed() / 100)  //1.34

约束验证DOM方法

  • checkValidity()
    • 输入的值是合法的就返回true,否则返回flase
<input id="input" type="number" max="300" required>
<button id="btn">验证</button>

let oInput = document.getElementById(‘input‘)
let oBtn = document.getElementById(‘btn‘)
			
btn.onclick = function () {
    if (oInput.checkValidity() == false) {
	console.log(oInput.validationMessage)
     }
}
  • 通过validationMessage返回提示信息

JSON 与 js对象互相转换

  • JSON.parse():将json字符串转换为js对象
//创建一个json字符串
const text = `{
    "names": [
	{"name": "蕾姆", "age": 18, "gender": "female"},
	{"name": "拉姆", "age": 18, "gender": "female"},
	{"name": "emt", "age": 14, "gender": "female"}
    ]
}`
//将json字符串转化为js对象
const obj = JSON.parse(text)
console.log(obj.names[0].name)	//蕾姆
  • JSON.stringify():将js对象转换为json字符串
const obj = {
    name: "486",
    age: 20,
    gennder: "male"
}
const json = JSON.stringify(obj)
console.log(json) //{"name":"486","age":20,"gennder":"male"}

以上是关于JS基础的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段9——JS中的面向对象编程

js代码片段: utils/lcoalStorage/cookie

JS代码片段:一个日期离现在多久了

js常用代码片段(更新中)

js常用代码片段

Chrome-Devtools代码片段中的多个JS库