内置对象

    JavaScript中的对象分为三种:内置对象,浏览器对象,自定义对象

    JavaScript提供多个内置对象:Math/String/Array/Number/Boolean.....

    对象只是带有属性方法的特殊数据类型。

    学习一个内置对象的使用,只要学会其常用的成员的使用(通过查文档学习),可以通过MDN/W3C来查询

    如何验证变量是不是对象?使用运算符instanceof

console.log(Array instanceof Object);//true
var obj = {};
console.log(obj instanceof Object);//true

    实例对象:通过构造函数创建出来,实例化的对象;

    静态对象:不需要创建,直接就是一个对象,方法(静态方法)直接通过这对象的名字调用。

    实例方法必须通过实例对象调用;

    静态方法必须通过大写的对象调用(静态对象)。

一、Math对象

    Math对象不是构造函数,它具有数学常数和函数的属性和方法,Math的属性和方法都是静态的。

    跟数学相关的运算来找Math中的成员(求绝对值、取整)

    常用的属性与方法:

1、Math.PI   //常数Π,圆周率
2、Math.abs(x); //返回数字'x'的绝对值
console.log(Math.abs('-1')); //1
console.log(Math.abs(-2));//2
console.log(Math.abs(null));//0
console.log(Math.abs("string"));//NaN
console.log(Math.abs());//NaN
 
3、Math.ceil(x); //返回大于或等于一个给定数字'x'的最小整数====向上取整
console.log(Math.ceil(0.0001)); //1
console.log(Math.ceil(-2)); //-2
console.log(Math.ceil(-3.0001)); //-3

4、Math.floor(x);//向下取整
console.log(Math.floor(2.001));//2
console.log(Math.floor(0.0001)); //0
console.log(Math.floor(-2)); //-2
console.log(Math.floor(-3.0001)); //-4

5、Math.max(a,b,c...);//返回给定的一组数字中的最大的那个,如果给定的参数中有一个不能转换称数字则返回NaN
console.log(Math.max(10, 29, 21));//29

6、Math.min(a,b,c...);//返回最小值
console.log(Math.min(10, 29, 21)); //10

7、Math.pow(a,b);//返回基数a的b次幂
console.log(Math.pow(2,5));//32

8.Math.sqrt(x); //返回数字x的平方根
console.log(Math.sqrt(4));//2

9、Math.random();//返回一个0和1之间的一个浮点伪随机数(不包括1)
console.log(Math.random());
console.log(parseInt(Math.random()*5));//返回0,1,2,3,4整数中的任意一个数
console.log(parseInt(Math.random()*10)+1);//返回1-10之间的随机数

10.Math.round(x);//返回一个数的四舍五入后的整数

例子:
1、自己定义一个对象,实现系统的Math.max的方法
function MayMath() {
    this.getmax = function()
    {
        var max = arguments[0];
        for (var i = 0; i < arguments.length; i++) {
            if (max < arguments[i]) {
                max = arguments[i];
            }
        }
        return max;
    }
}

var mymax = new MayMath();
console.log(mymax.getmax(10, 2, 12, 22));

2、封装一个函数用于生成一个十六进制的颜色值

二、Date对象

    创建 Date 实例用来处理日期和时间。Date 对象基于1970年1月1日(世界标准时间)起的毫秒数。Date对象没有字面量格式。

    Date对象的参数:

1.new Date();                       //没有参数,会根据系统当前时间创建对象
2.new Date(1498099000356);            //毫秒数 1498099000356,从1970年1月1日UTC时间开始的毫秒数
3.new Date("2018-10-3");              //日期格式字符串"2018-10-3"
4.new Date(2018,10,3,20,30,15,100);//年,月(月份从0开始),日,小时,分钟,秒,毫秒,所定义参数代表的是当地时间
5.以一个函数的形式来调用Date对象(不使用new操作符)会返回一个代表当前日期和时间的字符串。

    Date对象常用的方法:

1.Date.now();方法是一个静态方法,返回1970年1月1日 00:00:00 UTC到当前时间的毫秒数,类型为Number。
console.log(Date.now());

2.获取与设置Date对象的日期和时间(以下方法获取与设置的都是根据当地时间设置的,要设置世界标准时间需要使用对应的带UTC的方法)
var dt = new Date();    //创建Date对象,实例化对象

dt.setFullYear(2018);    //设置对象的年份,有3给参数(可以直接设置年月日)
console.log(dt.getFullYear());//获取年份

dt.setMonth(10);    //设置对象的月份,有2给参数 (可以直接设置月日),月份超出了11会更新相应年份月份,返回值是一个毫秒数   
console.log(dt.getMonth());     //获取月份,从0开始,真实月份需要加1

dt.setDate(30);    //设置对象的日,超出对象月份合理范围会更新相应对象日,月
console.log(dt.getDate());    //获取日
console.log(dt.getDay());     //获取星期数,从0(星期天)开始

dt.setHours(20);    //设置小时
console.log(dt.getHours());    //获取小时

dt.setMinutes(40);    //设置分钟
console.log(dt.getMinutes());    //获取分钟

dt.setSeconds(10);    //设置秒数
console.log(dt.getSeconds());    //获取秒数

dt.setMilliseconds(100);    //设置毫秒数
console.log(dt.getMilliseconds());    //获取毫秒数
console.log(dt);//Fri Nov 30 2018 20:40:10 GMT+0800 (中国标准时间)

3.日期格式化
dt.toString();//返回一个美式英语日期格式的字符串
dt.toLocaleString();//返回该对象的日期字符串,有2给参数可以设置使用哪种语言格式化,忽略参数则根据当前语言环境返回相应格式化的字符串

dt.toDateString();//以美式英语和人类易读的形式返回一个日期对象日期部分的字符串
dt.toLocaleDateString();//返回一个日期对象日期部分的字符串,根据参数或当前语言环境返回对应字符串格式

dt.toTime();//人类易读形式返回一个日期对象时间部分的以美式英语格式化字符串。
dt.toLocaleTime();

dt.valueOf();//返回对象的毫秒数值,从1970年1月1日0时0分0秒(UTC,即协调世界时)到该日期对象所代表时间的毫秒数

案例:
1、写一个函数,格式化日期对象,返回yyyy-MM-dd HH:mm:ss的形式
function formatDate(date) {
    var year = date.getFullYear();
    var month = date.getMonth()+1;
    var day = date.getDate();
    var hour = date.getHours();
    var minutes = date.getMinutes();
    var second = date.getSeconds();
    //小于十的月日时分秒前面加0
    function getTow(n) {
        return n >= 10 ? n : "0" + n;
    }

    return year + "-" + getTow(month) + "-" + getTow(day) + " " + getTow(hour) + ":" + getTow(minutes) + ":" + getTow(second);
}

var mydate = new Date();
console.log(formatDate(mydate));

2、计算时间差,返回相差的天/时/分/秒
function getInterval(start, end) {
  var day, hour, minute, second, interval;
  interval = end - start;
  interval /= 1000;
  day = Math.floor(interval / 60 /60 / 24);
  hour = Math.floor(interval / 60 /60 % 24);
  minute = Math.floor(interval / 60 % 60);
  second = Math.floor(interval % 60);
  return {
    day: day,
    hour: hour,
    minute: minute,
    second: second
  }
}

三、String对象

        JavaScript中没有字符类型,字符串可以看成是多个字符组成的数组。字符是一个一个的,在别的语言中字符用单引号括起来,js中字符串可以使用双引号也可以使用单引号括起来。因为字符串可以看出一个数组,所以可以使用for循环遍历。

        字符串的特性:不可变性,字符串的值是不能改变的。

var str = 'abc';
str = 'hello';
// 当重新给str赋值的时候,常量'abc'不会被修改,依然在内存中
// 重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变
// 由于字符串的不可变,在大量拼接字符串的时候会有效率问题
str[0] = 'w';
console.log(str[0]); //h
console.log(str); //字符串还是hello
//字符串可以使用索引访问字符串中的某个值,但是不能能设置

    String函数可以把其他值转换成字符串:String(x);或new String(x);

    .length属性返回字符串的长度,空字符串返回0,静态属性String.length返回1。

常用的转义字符
\0    空字符    
\'    单引号    
\"    双引号    
\\    反斜杠    
\n    换行    
\r    回车    
\v    垂直制表符    
\t    水平制表符    
\b    退格    
\f    换页    
\uXXXX    unicode 码

String常用的方法:

var str="kkdkdk";
.charAt(index);方法返回一个字符串指定索引位置的字符。
//字符串中的字符从左向右索引,第一个字符的索引值为 0,最后一个字符的索引值为.length - 1。
// 如果指定的 index 值超出了该范围,则返回一个空字符串。
console.log(str.charAt(4));

静态 String.fromCharCode(num1,...numN) 方法返回使用指定的Unicode值序列创建的字符串.返回的是一个字符串,不是String对象。
console.log(String.fromCharCode(65,66,67));//ABC
console.log(String.fromCharCode(65) instanceof String);//flase

.concat(string1,string2...,stringN);//将一个或多个字符串与原字符串连接合并形成一个新的字符串并返回
var str = "Hello";
console.log(str.concat("\0World!", "I love you"));//Hello World!I love you

//indexOf()方法返回从fromIndex索引开始查找字符串searchString在String对象中第一次出现的索引,若未找到则返回-1
.indexOf(searchString[,fromIndex]) //区分大小写
"Blue Whale".indexOf("Blue");     // returns  0
"Blue Whale".indexOf("blue");    // returns -1

.lastIndexOf(searchString[,fromIndex])//用法同上,从后向前找
"canal".lastIndexOf("a",0) // returns -1

//includes()方法用于判断一个字符串从position索引位置开始搜索是否包含在另外一个字符串中,返回true或flase
.includes(string[,position]);//此方法区分大小写
var str = "我们都是中国人";
console.log(str.includes("中国"));//true

//replace()方法返回一个由替换值替换一些或所有匹配的模式后的新字符串
.replace(regexp|substr, newSubStr|function);
var str = "小杨很帅啊!";
if(str.indexOf("帅")){
    str = str.replace("帅","漂亮");
}
console.log(str);

//slice()方法提取一个字符串的一部分,并返回一个新字符串(提取的部分)
.slice(开始索引[,结束索引]);//新字符串从开始位置到结束位置,不包含结束位置
var str = "我们都是好朋友";
console.log(str.slice(3,-2));//是好

//split()方法使用制定分隔符把一个String对象分割成一个字符串组成的数组,返回这个字符串数组
.split(分隔符[,分割后元素的个数]);
var monthString = "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec";
var arr = monthString.sqlit(",");
console.log(arr);

//substr();方法返回在String对象中开始位置指定字符个数的一个字符串,此方法以后将不支持。
.substr(开始索引,字符个数);

//substring()方法返回在String对象中开始位置到结束位置(不包括)的一个字符串
.substring(开始索引[,结束索引]);
var str = "Mozilla";
str = str.substring(3,2);
console.log(str);//z

.toLocaleLowerCase()、.toLowerCase()与.toLocaleUpperCase()、.toUpperCase()方法实现大小写字母转换。
.trim()方法删除字符串两端的空白字符。

案例:
1、截取字符串"我爱中华人民共和国",中的"中华"
var str = "我爱中华人民共和国";
//console.log(str.substr(2,2));
var str1 = "中华";
if (str.indexOf(str1) !== -1) {
    console.log(str.substr(str.indexOf(str1), str1.length));
}

2、"abcoefoxyozzopp"查找字符串中所有o出现的位置,把字符串中所有的o替换成!
var str = "abcoefoxyozzopp";
var index = 0;
while ((index = str.indexOf("o", index)) != -1) {
    console.log("字符串中出现0的位置为" + index);
    str = str.replace("o", "\!");
    console.log(str);
    index++;
}
//判断字符串中出现次数最多的字符,统计这个次数
var obj = {};
for (var i = 0; i < str.length; i++) {
    var k = str.charAt(i);
    if (obj[k]) {
        obj[k]++;
    } else {
        obj[k] = 1;
    }

}
var max = 0;
var char;
for (var key in obj) {
    if (max < obj[key]) {
        max = obj[key];
        char = key;
    }
}
console.log("出现次数最多的字符是" + char + "共出现" + max + "次");

四、Array对象

    检测一个变量是不是数组:法1:使用instanceof ;法2:Array.isArray(obj);

    Array常用方法:

//.concat(数组1,数组2...,数组N);用于合并数组,此方法不会改变原数组,而是返回一个新数组。
var arr = [10,20,30];
var arr1 = [40,50,60];
var arr2 = arr.concat(arr1);
console.log(arr2);//[10,20,30,40,50,60]

//.every(callback[,thisArg])方法测试数组中所有元素是否通过指定函数的测试。所有元素符合才返回ture,只要一个不符合就返回flase。
//callback 被调用时传入三个参数:元素值,元素的索引,原数组.空数组也返回ture,注:因为空数组没有元素
function isBigEnough(element,index,array){
    return (element>10);
}
var arr = [10,20,14];
console.log(arr.every(isBigEnough));//flase

//.filter(callback(element[, index[, array]])[, thisArg]);方法返回一个新数组,它的元素是Array对象中通过函数测试的的元素。
//都没有通过函数测试则返回空数组,用来过滤筛选
var filtered = [10,2,40,28,0,1,22].filter(isBigEnough);
console.log(filtered);//[10,40,28,22]

//.push(element1,element2....,elementN);此方法把1个或多个元素添加到原数组的末尾,并返回数组新的长度(length)。
//.unshift(element1,element2....,elementN));此方法把1个或多个元素添加到原数组的最前面,并返回数组新的长度(length)。
//.pop();方法删除数组中最后一给元素,并返回该元素的值。
//.shift();方法删除数组中第一个元素,并返回该元素的值。
var arr = [10, 20, 30, 40, 50];
var pushed = arr.push(100);
console.log(pushed);//6
console.log(arr);//[10,20,30,40,50,100]
var unshifted = arr.unshift(90);
console.log(unshifted);//7
console.log(arr);//[90,10,20,30,40,50,100]
var poped = arr.pop();
console.log(poped);//100
console.log(arr);//[90,10,20,30,40,50]
var shifted = arr.shift();//90
console.log(shifted);
console.log(arr);//[10,20,30,40,50]

//.forEach(callback(element[, index[, array]]);方法对数组元素遍历执行一次参数数函数,返回undefined
//.indexOf(searchElemnet);在数组中查找元素searchElement的的索引并返回,若未找到则返回-1
//.lastIndexOf(searchElemnet);同上,从后往前查找
//.jion(字符串);方法将数组的所有元素连接成一个字符串并返回该字符串。
//.map(callback);方法返回一个新的数组,其元素是原数组所有元素执行函数后的结果。
//.reverse();反转数组
//.sort([compareFunction]);返回排序后的数组,不稳定,通常使用比较函数作为此方法的参数
function compare(a, b) {
    if (a < b) {           // 按某种排序标准进行比较, a 小于 b
        return -1;
    }
    if (a > b) {
        return 1;
    }
    // a等于b返回0
    return 0;
}

//.slice(begin,end);方法返回一个新的数组对象,这一对象是一个由 begin和 end(不包括end)决定的原数组的浅拷贝。
//原始数组不会被改变。

//.splice(start[,deleteCount[,item1[,item2[, ...]]]]);从start位置删除deleteCount个元数然后从start位置添加元素item
//splice()方法通过删除现有元素和/或添加新元素来修改数组,并以数组返回原数组中被修改的内容。

标签: JavaScript