目录
Math数学对象不是一个构造函数 ,所以我们不需要使用 new 来调用,而是直接使用里面的属性和方法即可。
1、使用 new 关键字调用构造函数内的 Date()来创建一个日期对象
一、数学对象
Math数学对象不是一个构造函数 ,所以我们不需要使用 new 来调用,而是直接使用里面的属性和方法即可。
1、利用对象封装自定义的数学对象,里面的函数值可以进行定义
var obj = {
max: function (a, b, c, d) {
return Math.max(a, b, c, d)
},
min: function (a, b, c, d) {
return Math.min(a, b, c, d)
}
}
console.log(obj.max(1, 3, 5, 7));
console.log(obj.min(1, 3, 5, 7));
console.log(Math.max([1, 4, 7, 9]));
2、Math的绝对值和三个取整方式
(1)Math.abs(),取绝对值
console.log(Math.abs(5)); //输出结果为5
console.log(Math.abs(-5)); //输出结果为5
(2)Math.floor() ,不论小数,向下取整
var a = 3.5;
console.log(Math.floor(a));
//输出结果为3
(3)Math.ceil(),不论小数,向上取整
var a = 3.5;
console.log(Math.ceil(a));
//输出结果为4
(4)Math.round(),四舍五入
var a = 3.5;
console.log(Math.round(a));
//输出结果为4
var a = 3.4;
console.log(Math.round(a));
//输出结果为3
3、随机数 :Math.random()
使用Math.random()随机返回一个在0-1区间(左闭右开,可以取到左边的值取不到右边的值)内的小数。
创建一个随机数和随机点名
//我们想要得到20-50的随机整数并包含这2个整数 //Math.floor(Math.random() * (max - min + 1) + min) //随机数 Math.floor(Math.random() * (50 - 30 + 1) + 30) //随机点名 var arr = ["a", "b", "c", "d"] console.log(Math.floor(Math.random() * 4)); console.log(arr[Math.floor(Math.random() * 4)]);
二、日期对象:Date()
1、使用 new 关键字调用构造函数内的 Date()来创建一个日期对象
使用 Date()时,如果没有添加参数,则返回当前系统的当前时间
参数常用的写法为字符串型:'2023-01-1 8:8:8'
var date = new Date()
console.log(date);
//返回当前时间
var date1 = new Date("2000/1/1 00:00:00")
console.log(date1);
//返回2000/1/1 00:00:00
2、格式化日期
对年月日进行实例化
// 年 getFullYear()
// 月 getMonth()
// 日 getDate()
// 星期 getDay()
var now = new Date()
var year = now.getFullYear()
var month = now.getMonth() + 1
var day = now.getDate()
var week = now.getDay()
console.log(now);
console.log(year);
console.log(month);
console.log(day);
console.log(week);
week = ["日", "一", "二", "三", "四", "五", "六"][week]
alert("今天是" + year + "年" + month + "月" + day + "号,星期" + week)
对时分秒进行实例化
var now = new Date()
var year = now.getFullYear()
var month = now.getMonth() + 1
if (month < 10) month = "0" + month
var day = now.getDate()
if (day < 10) day = "0" + day
var week = now.getDay()
week = ["日", "一", "二", "三", "四", "五", "六"][week]
var hours = now.getHours()
if (hours < 10) hours = "0" + hours
var minutes = now.getMinutes()
if (minutes < 10) minutes = "0" + minutes
var seconds = now.getSeconds()
if (seconds < 10) seconds = "0" + seconds
console.log(hours, minutes);
console.log(seconds);
// 2024/10/22 00:00:00
alert("今天是" + year + "/" + month +
"/" + day + " " + hours + ":" + minutes + ":"
+ seconds + " 星期" + week)
alert(`今天是${year}/${month}/${day} ${hours}:
${minutes}:${seconds} 星期${week}`)
获得Date总的毫秒数(时间戳)
var a = new Date(); // 创建一个新的Date对象,表示当前日期和时间
console.log(+new Date()); // 使用一元加号操作符将Date对象转换为毫秒数
console.log(a.valueOf()); // 调用Date对象的valueOf方法获取毫秒数
console.log(a.getTime()); // 调用Date对象的getTime方法获取毫秒数
console.log(Date.now()); // 使用Date类的静态方法now获取当前时间的毫秒数
三、数组
1、创建数组的两种方法
使用字面量创建 或 使用 new 关键字声明构造函数 Array来进行创建
2、检测是否为数组的方法
(1)使用 .isArray 来进行检测,返回一个boolean值
(2)使用 instaceof 来检测是否为该引用的数据类型,但是不能检测基础数据类型和跨窗口或跨框架的数据
var arr = []
console.log(arr instanceof Array);
console.log(Array.isArray(arr));
(3)使用 Object.prototype.toString.call()来检测各种数据类型
console.log(Object.prototype.toString.call(123)); // "[object Number]"
console.log(Object.prototype.toString.call("hello")); // "[object String]"
console.log(Object.prototype.toString.call(true)); // "[object Boolean]"
console.log(Object.prototype.toString.call(undefined)); // "[object Undefined]"
console.log(Object.prototype.toString.call(null)); // "[object Null]"
console.log(Object.prototype.toString.call([])); // "[object Array]"
console.log(Object.prototype.toString.call({})); // "[object Object]"
console.log(Object.prototype.toString.call(new Date())); // "[object Date]"
console.log(Object.prototype.toString.call(/abc/)); // "[object RegExp]"
console.log(Object.prototype.toString.call(function() {})); // "[object Function]"
3、获取数组的索引方法
返回数组元素索引号方法 indexOf(数组元素),作用就是返回所需要查询的该数组元素的索引号。
它只返回第一个满足条件的索引号,如果在该数组里面找不到元素,则返回的是 -1
// 返回数组元素索引号方法 lastIndexOf(数组元素)
// 作用就是返回该数组元素的索引号 从后面开始查找
var arr1 = ['中午不睡觉', '下午犯困', '中午不睡觉',
'上眼皮和下眼皮', '中午不睡觉'];
console.log(arr1.indexOf('中午不睡觉'));
数组去重
['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b'] 要求去除数组中重复的元素。
1.目标: 把旧数组里面不重复的元素选取出来放到新数组中, 重复的元素只保留一个, 放到新数组中去重。
2.核心算法: 我们遍历旧数组, 然后拿着旧数组元素去查询新数组, 如果该元素在新数组里面没有出现过, 我们就添加, 否则不添加。
3.我们怎么知道该元素没有存在? 利用新数组.indexOf(数组元素),如果返回时 - 1 就说明,新数组里面没有该元素
var arr = ['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b'] var newArr = [] for (var i = 0; i < arr.length; i++) { if (newArr.indexOf(arr[i]) == -1) newArr.push(arr[i]) //检测数组内是否含有重复的值,当indexof的返回值为-1时 //if进行判断新数组内没有该数字,对其进行插入 } console.log(newArr);
4、基本包装类型
对象和复杂数据类型才有属性和方法,而基本包装类型就是将基础数据类型包装成为复杂数据类型
// (1) 把简单数据类型包装为复杂数据类型 str = new String(str) // (2) 销毁这个临时变量 str = null
字符串具有不可变性
四、字符串
1、根据字符返回位置寻找字符串对象
// 字符串对象 根据字符返回位置 str.indexOf('要查找的字符', 起始的位置)
// 从索引号是 3的位置开始往后查找
var str = "abcdefgabcdefga"
console.log(str.indexOf("a", 8));
2、查找字符串中某个字符出现的次数
var str = "oabcoefoxyozzopp"
var newArr = []
for (var i = 0; i < str.length; i++) {
if (newArr.indexOf(str[i]) == -1) newArr.push(str[i])
}
console.log(newArr);
for (var i = 0; i < newArr.length; i++) {
// console.log(str[3]);
var arr = []
for (var i = 0; i < newArr.length; i++) {
if (str[i] == newArr[i]) {
arr.push(i)
}
}
console.log(arr);
console.log(arr.length);
// arr.
}
3、根据位置返回字符
(1)charAt(index) 根据位置返回字符
var str = "abcdefg"
console.log(str.charAt(0));
(2)charCodeAt(index)
var str = "abcdefg"
console.log(str.charCodeAt(3));
(3)arr.[index]
var str = "abcdefg"
console.log(str[4]);
4、字符串的操作方法
// 1. concat('字符串1','字符串2'....)
var str = "abcdeFAGBghijcklmnaa"
var str1 = "cdf"
console.log(str.concat(str1));
// 2. substr('截取的起始位置', '截取几个字符');
// 第一个2 是索引号的2 从第几个开始 第二个2 是取几个字符
//substring(4, 6) slice(4, 6)
console.log(str.substr(2, 3));
console.log(str.substring(2, 3));
console.log(str.slice(2, 3));
//replace 替换 第一个参数是被替换的元素,第二个是要替换的元素
//只替换第一个查找到的元素
//replaceAll 替换全部
console.log(str.replaceAll("a", "z"));
console.log(str);
//split 切割成字符串列表,返回一个新的数组
console.log(str.split(''));
console.log(str.split("").reverse().join(""));
//toUpperCase 英文字母全大写
//toLowerCase 英文字母全小写
console.log(str.toUpperCase());
console.log(str.toLowerCase());
concat('字符串1','字符串2'....) | 拼接两个字符串 |
substr('截取的起始位置', '截取几个字符') | 从索引位置开始截取几个字符 |
replace("a", "z") | 替换,第一个参数是被替换的元素,第二个是要替换的元素(只替换第一个查找到的元素) |
replaceAll ("a", "z") | 替换所有查找到的元素 |
split('"') | 切割成字符串列表,返回一个新的数组 |
substring(a, b) | 截取在这个区间内的字符,区间左闭右开 |
slice(a, b) | 截取在这个区间内的字符,区间左闭右开 |
toUpperCase | 英文字母全大写 |
toLowerCase | 英文字母全小写 |
五、简单数据类型和复杂素具类型的一些补充
1. 简单数据类型 是存放在栈里面 里面直接开辟一个空间存放的是值
2. 复杂数据类型 首先在栈里面存放地址 十六进制表示 然后这个地址指向堆里面的数据
且需要注意字符的不可变性,在进行传参的时候变量所代表的值也不同。
// 简单数据类型传参 function fn(a, b) { a += b//4 3 console.log(a, b); } var a = 1, b = 3 fn(a, b) console.log(a, b); //a=4,b=3 //a=1,b=3 // 复杂数据类型传参 function fn(obj) { obj.name = "b" console.log(obj); } var obj = { name: "a", ahe: 18 } // fn(obj) // console.log(obj); var obj1 = obj obj1.name = "b" console.log(obj); console.log(obj1); //obj1和obj的结果都为 //ahe=18 //name=b