三十二、js数据类型
1.7种数据类型
2.类型检测
typeof
- 比较特殊的是typeof null返回“object”。
- 历史原因,规范尝试修改typeof null返回“null”修改完大量网站无法访
问,为了兼容,或者说历史原因返回"object"。 - typeof对基本类型和函数对象很方便,但是其他类型就没办法了。
instanceof
原理:判断左边的左操作数的对象的原型链上是否有右边这个构造函数的prototype属性。
任何一个构造函数都有一个prototype对象属性,这个对象属性将用作new出来的对象的原型。
- 基于原型链操作。obj instanceof Object。
- 左操作数为对象,不是就返回false,右操作数必须是函数对象或者函数构造器,不是就返回typeError异常。
- instanceof在判断对象是不是数组,Data,正则等时很好用。
- instanceof坑:不同window或iframe之间的对象类型检测不能使用instanceof!
Object.prototype.toString
constructor
任何对象都有constructor属性,继承自原型的,constructor会指向构造这个对象的构造器或者构造函数。
constructor可以被改写,所以使用要小心。
duck type
比如不知道一个对象是不是数组,可以判断它的length是不是数字,它是不是有join,push这样一些数组的方法。通过一些特征判断对象是否属于某些类型,这个有时候也常用。
三十三、模块化开发
01.什么是模块化
所谓的模块化开发就是封装细节,提供使用接口,彼此之间互不影响,每个模块都是实现某一特定的功能。模块化开发的基础就是函数
02.实现模块化----使用函数封装
03.实现模块化----使用对象封装
04.实现模块化----立即执行函数写法
05.实现模块化----放大模式
06.实现模块化----宽放大模式(Loose augmentation)
07.实现模块化----输入全局变量
三十四、手机号的正则表达式(以1开头的11位数字)
let phone=13712345678;
let reg=/^1[3|4|5|7|8][0-9]{9}$/;
console.log(phone,reg.test(phone)?'正确的手机号':"不正确的手机号")
- ^1 以1开头
- [3|4|5|7|8] 第二位是3或4或5或7或8任意一位
- [0-9]{9}$ 以0-9任意9位数字结尾
三十五、实现元素宽度跟随浏览器窗口变化
<body>
<div id="left"></div>
<div id="center"></div>
<div id="right"></div>
<script src="jquery-3.4.1.js"></script>
<script type="text/javascript">
//浏览器窗口改变时触发
$(window).resize(()=>{
//将元素的宽度设为窗口的宽度/3
$("#center").width(`${Math.floor($(window).width()/3)}`)
console.log($("#center").width())
})
</script>
</body>
三十六、原生js实现获取li的索引
<body>
<ul>
<li>11</li>
<li>22</li>
<li>33</li>
<li>44</li>
<li>55</li>
</ul>
<script type="text/javascript">
//获取所有的li
let lis=document.getElementsByTagName('li');
for(let i=0;i<lis.length;i++){
//每个li绑定点击事件
//利用let的块级作用域,每个li都绑定了对应的i
lis[i].onclick=()=>console.log(`${lis[i].innerHTML}被点击了,索引值是${i}`)
}
</script>
</body>
三十七、将json字符串转为对象
let jstr='{"name":"张三","age":"18"}'
console.log(jstr)
console.log(typeof jstr)
let jobj=JSON.parse(jstr)
console.log(jobj instanceof Object)