基础数据类型与复杂数据类型的区别
概念
基础数据类型:在存储时,变量中存储的是值本身,因此也叫做值类型。
复杂数据类型:在存储时,变量中存储的是地址(引用),因此也叫做引用类型。
赋值
基础数据类型将存储的值赋值给新的变量,赋值后,两个变量没有关系。修改其中一个,不会影响另外一个。
复杂数据类型,将存储的地址赋值给新的变量,赋值后,两个变量指向同一个对象。通过一个变量修改对象,另外一个访问时也是被修改后的对象。
比较
两个基础数据类型比较,直接比较值。
两个复杂数据类型比较,比较的是地址是否相同。 也就是说,要看两个变量是否指向同一个对象。
对象
对象:万物皆对象。 面向对象编程语言而言。
概念
现实中的对象: 一个具体的事物,看得见,摸得着。 具有属性和行为。 描述一个事物时,使用名词的都是属性,使用动词的都是行为。
js中的对象: 一个抽象的概念,用来描述具体的事物的。也有属性和行为。 属性可以是基础数据类型,也可以是复杂数据类型。行为:函数。
js中的对象是由 多个键值对组成。
声明对象的方式
1.通过构造函数
var obj = new Object();
2.字面量方式
var obj = {}
//也可以直接定义属性
var obj = {
name:"zhangsan",
age:24,
isMarry:false,
eat:function(){
console.log("干饭干饭,上盆");
}
}
属性
新增属性
//格式: 对象.属性名 = 属性值
obj.height = 175;
修改属性
//格式: 对象.属性名 = 属性值
obj.height = 170;
【注意】有则修改,无则新增。
删除属性
使用delete
关键字
//格式:delete 对象.属性名
delete obj.height;
使用属性
1.点语法
//格式 对象.属性名
obj.height
2.中括号
//格式 对象['属性名']
obj['height']
3.区别
【重点】如果访问一个对象没有的属性,返回值是undefined。
点语法不能使用变量,使用变量时会将变量名当做属性名去访问。
中括号的方式可以使用变量,而且还可以使用表达式(字符串的拼接)。
内置对象
Math对象
处理js中和数学相关的函数
//求最大值
var max = Math.max(40, 35, 50, 60);
//求最小值
var min = Math.min(40, 35, 50, 60);
//求绝对值
var abs = Math.abs(-80);
//四舍五入
var round = Math.round(1.49999999);
//向上取整
var ceil = Math.ceil(1.001);
//向下取整 舍弃小数位。
var floor = Math.floor(2.9);
//随机数 返回一个0-1之间的随机数,不包含1. 含头不含尾
var random = Math.random();
随机数函数
//求n-m之间的随机整数
function getRandom(n, m) {
return Math.floor(Math.random() * (m + 1 - n) + n);
}
随机颜色案例
function getColor(){
//定义表示颜色的变量,#为固定值。
var str = "#";
//定义表示16进制的数组。每一个元素就是16进制的一个数。
var arr = ["0","1","2","3","4","5","6",'7',"8","9","A","B","C","D","E","F"];
//循环6次,生成随机颜色字符
for (var i = 0; i < 6; i++) {
//获取随机的下标。
var index = getRandom(0,15);
str+=arr[index];
}
return str;
}
Date对象
处理日期
定义日期对象
//创建日期时,如果不指定特定日期,则默认表示当前时间。
var d = new Date();
//指定特定日期
var d = new Date("2021-10-29");
//数字形式,指定日期
var d = new Date(2021,9,29);
【注意】js中获取到的月份会比实际月份小一个月。因为js中是从0开始计算月份的。 月份的范围为:0~11.
方法
//获取时间的毫秒数
d.getTime()
//设置时间
d.setTime(86400000);
//获取 几号
d.getDate()
//设置 几号
d.setDate(10)
//获取 月份
d.getMonth();
//设置月份【注意】 月份从0开始 如果超过11,则从第二年开始计算。
d.setMonth(1)
//获取年份
d.getFullYear();
//设置 年份
d.setFullYear()
//获取 星期几
d.getDay()
//时
d.getHours/d.setHours
//分
d.getMinutes()/d.setMinutes(20)
//秒
d.getSeconds()/d.setSeconds();
显示日期的方法
//显示:星期 月 日 年 Fri Oct 29 2021
d.toDateString()
///显示 时分秒 时区 10:06:06 GMT+0800 (中国标准时间)
document.write(d.toTimeString())
//以本地的格式显示 年月日 2021/10/29
d.toLocaleDateString()
//以本地的格式显示 时分秒 上午:07:00
d.toLocaleTimeString()
//以本地的格式显示 年月日时分秒 2021/10/29 上午07:00
d.toLocaleString()
自定义日期格式
//格式化日期:X年X月X日 hh:mm:ss
//参数:日期对象
//返回值:格式化好的字符串。
function formatDate(date){
//获取年
var year = date.getFullYear();
//获取月
var month = date.getMonth();
//获取日
var day = date.getDate();
//获取 时
var h = date.getHours();
//获取 分
var m = date.getMinutes();
//获取 秒
var s = date.getSeconds();
return `${year}年${month}月${day}日 ${zeroFill(h)}:${zeroFill(m)}:${zeroFill(s)}`
}
function zeroFill(num){
return num<10?"0"+num:num;
}
定时器
setInterval
按照周期执行相应的代码。 开启一个定时器。
//fn:周期执行的函数 interval:每隔多久执行一次 单位是ms
//timer 定时器的ID。
var timer = setInterval(fn,interval)
【注意】fn的位置上,除了函数外,也可以直接写代码,但是代码只能是字符串的形式。
clearInterval
关闭相应的定时器。需要关闭定时器ID。
clearInterval(timer);
延时器
setTimeout
延迟一段时间后,执行指定的代码,返回一个延时器的唯一ID。
//fn:周期执行的函数 delay:延迟多久执行一次 单位是ms
//timer 定时器的ID。
var timer = setTimeout(fn,delay)
clearTimeout
关闭相应的延时器,需要一个延时器的ID。
clearTimeout(timer)
包装对象
常用的三个包装对象:String Number Boolean
为什么要使用包装对象?
包装对象可以为我们提供一些属性和方法,以便于我们操作基础数据类型。
String对象
创建一个string对象。
var str = new String("三十功名尘与土,八千里路云和月");
方法和属性
//字符串的长度
str.length
//返回下标位置上的字符 0~length-1 超出范围返回 空 ""。
var str = b.charAt(15);//返回下标为15的字符给str
//截取字符串 substr(开始的下标,截取多少个字符)
var str = b.substr(12,3); //从下标为12的位置,截取3个字符。返回给str。
//截取字符串 substring(开始的下标,结束的下标) 含头不含尾
var str = b.substring(2,4);//从下标为2的字符开始截取,到下标为4的字符结束,不包含4.
//截取字符串 slice(开始下标,结束下标) 可以写负数 负数表示倒数
var str = b.slice(2,-1); // 从下标为2的字符开始截取,到倒数第一位结束。不包含最后一位。
//转大写 所有英文单词转大写
a = a.toUpperCase();
//转小写 所有英文单词转小写
a = a.toLowerCase();
//替换 replace(要替换的字符,替换成的字符)
var str = b.replace("三十","十三") //将b字符串中所有的 `三十` 替换成 '十三'
//分割字符串 split('分隔符') 返回值是一个数组。数组中包含被分割后的字符串。 如果分隔符在原数组中不存在,则返回一个只包含原字符串的数组。
var res = b.split(","); //表示将字符串以逗号分割
//查找字符串中是否包含某个字符,如果包含,则返回该字符的下标。如果不包含,返回-1;
//如果查找的字符是多字符,返回的下标为第一个字符的下标
var res = b.indexOf("尘土"); //查找b字符串中是否有'尘土'这个字符串,如果有返回'尘'的下标。
//查询某个字符串是否存在在另外一个字符串中 返回值是布尔值。 有则true,无则false。
var res = b.incloudes("尘与土"); //查找 b字符串中是否包含'尘与土'。
//去除首尾空格 主要用于表单注册(涉及到用户输入时)等场景。
var res = b.trim();
//判断一个字符串是不是以某个字符串开头。
var res = b.startsWith("三十")
console.log(res);
//判断一个字符串是不是以某个字符串结尾
var res = b.endsWith("云和月");
console.log(res);
//从前面补全字符串 目标长度:字符串最终要变成的长度, 填充字符 补全时所用的字符。
//格式: str.padStart(目标长度,'填充字符');
// 【注意】 1.如果目标长度小于实际长度,则无效。
//2.如果填充字符由多个字符组成,填充时若不够,则会重复填充,直到填满目标长度,如字符还有剩余,后面的会被舍弃。
var num = new String("10");
var res = num.padStart(2,"0");
console.log(res);
自动装箱
自动装箱:自动将基础数据类型包装成包装对象。
程序执行时,如果让基础数据类型使用了属性和方法,则js会自动将其包装为包装对象,然后执行完,再将其拆箱为基础数据类型
//下面的案例中,可以看到 基础数据类型可以使用 属性和方法,这就说明在执行时,字符串自动变成了String对象。
var str = " 为啥你在衣柜里修水龙头?"
console.log(str.length);
console.log(str.trim());