JS笔记(七)内置对象、基本包数据类型
js学习中有三种对象
(1)内置对象----js系统自带的对象
(2)自定义对象----自己定义的构造函数创建的对象
(3)浏览器提供的对象----BOM、DOM
验证是不是对象方法:
console.log(Array instanceof Object); //Array 系统的对象
var obj = {};
console.log(obj instanceof Object);
1、内置对象
实例对象:通过构造函数创建出来,实例化的对象,需要var xx = new Person();
静态对象:不需要创建,直接就是一个对象,方法(静态方法)直接通过这个对象名字调用
实例方法必须通过实例对象调用
静态方法必须通过大写的对象调用
(1)Math对象
(在MDN文档上面查找,属性/方法)
math是一个内置对象,但不是一个函数对象,有数学常数和函数的属性和方法,都是静态的。
使用:Math.abs(null)--------0;
Math.PI---- π---
Math.E---- 常熟的底数
Math.abs(值)---- 绝对值
Math.ceil(值)---- 向上取整
Math.floor(值)---- 向下取整
Math.pow(2,4)---- 2的4次幂
Math.random()*5---- [0~5)直接产生随机数
Math.random()*5+1---- [1~6)直接产生随机数
例1:
var result = Math.max(10,20,30,40);
console.log(result);
//如果要自己定义一个对象,实现系统的max方法
function MyMath(){
this.getMax = function(){
var max = arguments[0];
for(var i=0; i<argument.length;i++){
if(max < argument [i] )[
max = argument[i];
}
}
return max;
};
}
var mt = new MyMath();
var result = mt.getMax(10,20,30,40,50);
console.log(result);
例2:随机产生一个十六进制的颜色值,封装成一个函数
function getColor(){
var str = '#';
//一个十六进制的值的数组
var arr = ["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];
for(var i=0;i<6;i++){
//产生的每个随机数都是一个索引,根据索引找到数组中对应的值,拼接到一起
var num = parseTnt(Math.random()*16);
str += arr[num];
}
return str;
}
//页面加载的事件
window.onload = function(){
//在文档中通过id属性的值查找这个元素(标签),设置该标签的背景颜色
document.getElementById("dv").style.backgroundColor = getColor();
}
<div id="dv"></div>
(2)Date对象
用来处理日期和时间,Date对象基于1970年1月1日(世界标准时间)起的毫秒数
var dt = new Date();
var dt = new Date("2018-08-08");
var dt = new Date("2018/08/08");
var dt = Date.now(); //毫秒数,1970年1月1日到现在的毫秒数
例3:
var dt = new Date();
//获取年份
console.log(dt.getFullYear());
//获取月份
console.log(dt.getMonth()); //从0开始的
//获取日期
console.log(dt.getDate());
//获取小时
console.log(dt.getHours());
//获取分钟
console.log(dt.getMinutes());
//获取秒
console.log(dt.getSeconds());
//获取星期
console.log(dt.getDay()); //从0开始
//转成字符串
console.log(dt.toString());
console.log(dt.toDateString()); //英文格式--日期
console.log(dt.toLocalDateString()); //数字格式 --日期
console.log(dt.toTimeString()); //小时分钟秒
console.log(dt.toLocalTimeString()); //小时分钟秒
console.log(dt.valueOf()); //毫秒值
var dt = +new Date(); //一种特殊写法,不支持h5的浏览器可以用这种写法
例4:格式化后的指定格式的日期和时间---封装一个函数
function getDate(dt){
//获取年
var year = dt.getFullYear();
//获取月
var month= dt.getMonth() +1 ;
//获取日
var day= dt.getDate();
//获取小时
var hour= dt.getHours();
//获取分钟
var minute= dt.getMinutes();
//获取秒
var second= dt.getSeconds();
month = month < 10 ? "0" + month : month;
day= day< 10 ? "0" + day : day;
hour= hour< 10 ? "0" + hour : hour;
minute = minute< 10 ? "0" + minute : minute;
second= second< 10 ? "0" + second : second;
return year + "年" + month + “月”+ day+ "日" + hour +":" + minute+":" +second;
}
console.log(getDate(new Date()));
(3)String对象(字符串对象大写,小写的是数据类型)
字符串:string str = "hello"; //字符串必须用双引号
字符:char ch = 'h'; //字符必须用单引号,值只有一个
//字符串可以看成多个字符组合成
//js中无论单引号还是双引号都是字符串
//字符串可看成是数组,可用for循环遍历
//字符串有不可变性,值不可变,但可重新赋值
原来的值没改,但是指向改变了。
(实例方法---必须通过new的方式创建的对象(实例对象)来调用的方法
静态方法---直接通过大写的构造函数的名字调用的方法(直接通过大写的对象名字调用))
字符串里的常用属性:
String.length---长度
String.charAt(index)---返回字符串中指定的第index个字符
String.fromCharCode(index,index,index)---返回指定的Unocode值序列创建的字符串,对应Ascii表
String.concat("字符串","字符串")---将一个或多个字符串与原字符串连接合并,再返回
String.indexOf("好",5)---("要找的字符串","从第index位置开始"),返回的是传入的字符串的位置
String.LastIndexOf("好",5)---和indexOf()一样,这个是从后面往回找,indexOf()是从前到后,否返-1
String.relace("String1","String2")---String2替换String1
String.slice(5,10)---提取字符串,从5位置开始,到10位置结束,但没有10
String.split("|",index)---从|这个位置切割字符串,index是留几个的意思
var str = "乔峰|小明|小苏|小陈";
var arr = str.split("|");
for(var i = 0;i<arr.length;i++){
console.log(arr[i]);
}
String.substr(5,5);---切割,(开始切割的位置,个数)
String.sybstring(5,5)----(开始位置,结束为止),不包含结束的位置的字符
String.toLocaleLowerCase()---转小写
String.toLocaleUpperCase()---转大写
String.toLowerCase()---转小写
String.toUpperCase()---转大写
String.trim();---切断字符串两端的空格
案例:统计一个字符串中每个字母出现的次数
var str = "wgwggdggdggdggduiozkv";
str = str.toLocaleLowerCase();
var obj = {};
for (var i=0;i< str.length;i++){
var key = str[i];
if(obj[key]){ //判断obj中包含这个字母没有
obj[key]++; //有就累加个数
}
else{
obj[key] = 1; //没有就把字符加到对象中,并且累加一次
}
}
for(var key in obj){
console.log(key + "这个字母出现" + obj[key]+"次");
}
(4)Array内置对象的方法
判断变量/对象是不是数组:var obj=[]; console.log(obj instanceOf Array);
或:console.log(Array.isArray(obj));
Array.from();---
Array.concat(arr,arr1,arr2)--arr1.concat(arr2)---合并两个或多个数组
Array.every(函数)---返回值boolean类型,函数作为参数使用,函数有三个参数,第一个是元素的值,第二个是索引值,第三个是原来的数组(没用)。只有数组中每个元素都符合条件,才返回true
或
Array.filter()---过滤
Array.push()---把值追加到数组中,加到最后,返回值是追加数据之后的数组长度
Array.pop()---删除最后一个元素,返回值是删除的这个值
Array.shift()---删除第一个元素,返回值是删除的这个值
Array.unshift()---向数组的第一个元素前面插入新的元素,返回值是插入后的长度
Array.forEach()---遍历数组,相当于for循环
Array.indexOf(元素值)---返回的是索引,没有则是-1
Array.join("|")---返回的是拼接后的字符串
Array.map(函数)---数组中的每个元素都要执行这个函数,返回的是执行后一起放到一个新的数组
Array.reverse()---数组反转
Array.sort()---数组排序,但不稳定
Array.sort(函数(a,b))---数组排序,传入函数稳定
Array.slice(开始的索引,结束后的索引),截取开始索引到结束索引的数据放到一个新的数组中,但不包括结束索引的
Array.splice(位置index,数字代表删掉的index/0是不删,‘drum字符串是插入的内容’)---
2、基本包装类型
普通变量不能调用属性和方法
对象可以直接调用属性和方法
--->基本类型,在执行代码的过程中调用了属性或者方法,而转变成基本包装类型对象
(string number boolean)
----特别注意
如果是一个对象&&true,那么结果是true
如果是一个true&&对象,那么结果是对象
var flag = new Boolean(false);
var result = true&&flag;
console.log(result);
----特别注意
var num=10; //基本类型
var num=Number("10"); //转换,没有new--类型转换
var num=new Number("10"); //基本包装类型