乐趣区

关于javascript:JavaScript基础7

函数的办法

这两个办法都是函数对象的办法,须要通过函数对象来调用
this 的状况:
1. 以函数模式调用时,this 永远都是 window
2. 以办法模式调用,this 时调用办法的对象
3. 以构造函数模式调用时,this 时新创建的那个对象
4. 应用 call 和 apply 调用时,this 时指定的那个对象

function fun (){alert("我是 fun 函数")
}

当对函数调用 call()和 apply()都会调用函数执行

fun();                        // 我是 fun 函数
fun.apply();                // 我是 fun 函数
fun.call();                    // 我是 fun 函数

在调用 call()和 apply()能够将一个对象指定为第一个参数
此时这个对象将会成为函数执行时的 this

function fun (){alert(this)
}
var obj = {};
fun();                        //object window
fun.call(obj);                //object Object
fun.apply(obj);                //object Object


function fun (){alert(this.name)
}
var obj = {name:"obj"};
var obj2 = {name:"obj2"};
fun.apply(obj);                //obj
fun.apply(obj2);            //obj2

function fun (){alert(this.name)
}
var obj = {
    name:"obj"
    sayName:function(){alert(this.name);
    }
};
var obj2 = {name:"obj2"};

obj.sayName();                            //obj
obj.sayName.apply(obj2);                //obj2

call()能够将实参在对象之后顺次传递

function fun (a,b){console.log("a="+a);
    console.log("b="+b);
}
var obj = {name:"obj"};
var obj2 = {name:"obj2"};
fun.call(obj,2,3);                        //a=2 b=3

apply()办法须要将实参封装到一个数组中对立传递

fun.apply(obj,[2,3]);                    //a=2 b=3

arguments

在调用函数时,浏览器每次都会传递进两个隐含的参数,
1. 函数的上下文对象 this
2. 封装实参的对象 arguments
arguments 时一个类数组对象,它也能够通过索引来操作数据,也能够获取长度
在调用函数时,咱们所传递的实参都会在 arguments 中保留
arguments.length 能够用来获取实参的长度
咱们即便不定义形参,也能够通过 arguments 来应用实参
只不过比拟麻烦
arguments[0] 示意第一个实参
arguments[1] 示意第二个实参
它外面有一个属性叫做 callee
这个属性对应一个函数对象,就是以后正在指向的函数的对象

function fun(){console.log(arguments instanceof Array);          //false
    console.log(Array.isArray(arguments));            //false
    console.log(arguments[1]);                        //true
    console.log(arguments.length);                    //2
    console.log(arguments.callee);                    // 以后正在指向的函数的对象
}
fun();
fun("hello",true);                                    //2

Date 对象

在 JS 中应用 Date 对象来示意一个工夫
如果间接应用构造函数创立一个 Date 对象。则会封装为以后代码执行的工夫

var d = new Date();

console.log(d);

创立一个指定的工夫对象
须要在构造函数中传递一个示意工夫的字符串作为参数
日期的格局:月份 / 日 / 年 时: 分: 秒

var d2 = new Date("03/10/2021 11:11:30");

console.log(d2);

getDate() 获取以后日期对象是几日

var date = d2.getDate()

console.log("date="+date);                        //10 号

getDay() 获取以后日期对象是周几,会返回一个 0 - 6 的值,0 示意周日,1- 6 周一到周六

var day = d2.getDay()

console.log("day="+day);                        // 周六

getMonth() 获取以后工夫对象的月份,会返回一个 0 -11 的值,0 示意一月,1-11 示意二到十二月

var month = d2.getMonth();

console.log("month="+month);                    //2(示意三月)console.log("month="+(month+1));                // 3 进行转换为中国月

getFullYear() 获取以后日期对象的年份

var year = d2.getFullYear;

console.log(year);                                //2021

getTime() 获取以后日期对象的工夫戳,
工夫戳指的是从格林威治规范工夫的 1970 年 1 月 1 日,0 点 0 时 0 分 0 秒
到以后日期所破费的毫秒数(1 秒 =1000 毫秒)
计算机底层在保留工夫应用的都是工夫戳

var time = d2.getTime();

console.log(time);    

var d3 = new Date("1/1/1970 0:0:0");
time = d3.getTime();
console.log(time);                                //-28800000 中国时区所以负值还没到 d3 工夫(- 8 小时)

获取以后的工夫戳

time = Date.now();
console.log(time);

能够利用工夫戳测试代码的执行的性能

var start = Date.now();
for(var i=0 ; i<100; i++){console.log(i)
}
var end = Date.now();

console.log("执行了"+(end - start)+"毫秒");

Math

Math 和其余的对象不同,不是一个构造函数,
它属于一个工具类不必创建对象,它里边封装了数学运算相干的属性和办法
Math.PI 用来示意圆周率

abs()能够用来计算一个数的绝对值

console.log(Math.abs(-1));                        //1

Math.ceil() 能够对一个数进行向上取整,小数位只有有值就主动进一

console.log(Math.ceil(1.4));                    //2

Math.floor() 能够对一个数进行向下取整小数局部会被舍掉

console.log(Math.floor(1.99));                    //1

Math.round() 能够对一个数进行四舍五入取整

console.log(Math.round(1.4));                    //1

Math.random() 能够用来生成一个 0 - 1 之间的随机数

console.log(Math.random());

生成一个 0 - x 之间的随机数

Math.round(Math.random()*x);

生成 0 -10 的随机数

console.log(Math.round(Math.random()*10));

生成一个 x - y 之间的随机数

console.log(Math.round(Math.random()*(y-x))+x);

生成一个 1 -10 之间的随机数

console.log(Math.round(Math.random()*9)+1);

生成一个 1 - 6 之间的随机数

console.log(Math.round(Math.random()*5+1));

max() 能够获取多个数中的最大值

var max = Math.max(10,20,30);
console.log(max);                            //30

min() 能够获取多个数中的最小值

var min = Math.min(10,20,30);
console.log(min);                            //10

Math.pow(x,y) 返回 x 的 y 次幂

console.log(Math.pow(3,2))                    //9

Math.sqrt() 用于对一个数进行开方运算

console.log(Math.sqrt(2))                          //1.4142135623730951

包装类

在 JS 中为咱们提供了三个包装类,通过这三个包装类能够将根本数据类型的数据转换为对象
1.String()
能够将根本数据类型字符串转换为 String 对象
2.Number()
能够将根本数据类型的数字转换为 Number 对象
3.Boolean()
能够将根本数据类型的布尔值转换为 Boolean 对象
然而留神:咱们在理论利用中不会应用根本数据类型的对象
如果应用根本数据类型的对象,再做一些比拟时可能会带来一些不可预期的后果
办法和属性只能增加给属性,不能增加给根本数据类型
当咱们对一些根本数据类型的值去调用属性和办法时,
浏览器会长期应用包装类将其转换为对象,而后在调用对象的属性和办法
调用完之后,再将其转换为根本数据类型

字符串的办法

var str = "Hello World"

在底层字符串是以字符数组的模式保留的
[“H”,”e”,”l”]
length 属性
能够用来获取字符串的长度

console.log(str.length);                    //11
console.log(str[1]);                        //e

charAt()
能够返回字符串中指定地位的字符
依据索引获取指定的字符

var str = "Hello World"
var result = str.charAt(0);                    //H
var result = str[0];                        //H
console.log(result);

charCodeAt()
获取指定地位字符的字符编码(Unicode 编码)

var result = str.charAt(0);                    //H
var result = str.charCodeAt(0);                //72

String.fromCharCode()
能够依据字符编码去获取字符

result = String.fromCharCode(72);
console.log(result);                        //H

十六进制的在后面加 0x

result = String.fromCharCode(0x2682);        //⚂

concat()
能够用来连贯两个或多个字符串
作用和 + 一样

var str = "Hello World"
result = str.concat("你好","再见");
console.log(result);                        //Hello World 你好再见

indexOf()
该办法能够检索一个字符串中是否含有指定内容
如果字符串中含有该内容,则会返回其第一次呈现的索引
如果没有找到指定的内容,则返回 -1

str = "Hello World";
result = str.indexOf("0");            
console.log(result);                            //-1
result = str.indexOf("l");            
console.log(result);                            //2

能够指定第二个参数,指定开始查找的地位

result = str.indexOf("l",4);        
console.log(result);                            //9    

lastIndexOf()存疑
该办法的用法和 indexof()一样
不同的是 indexOf 是从返回后找
而 lastIndexOf 是从后往前找

str = "Hello World";
result = str.lastIndexOf("l");            
console.log(result);                            //9

能够指定第二个参数,指定开始查找的地位

result = str.lastIndexOf("l",4)    ;        
console.log(result);                            //3

slice()
能够从字符串中截取指定的内容
不会影响原字符串,而是将截取到的内容返回
参数:
第一个:开始地位打的索引(包含开始地位)
第二个:完结地位的索引(不包含完结地位)如果省略第二个参数则会截取到后边所有的
也能够传递一个正数作为参数,正数的话将会从后边计算

str = "abcdefghijk";
result = str.slice(1,4);
console.log(result);                            //bcd

substring()
能够用来截取一个字符串,与 slice()相似
参数:
第一个:开始截取地位的索引(包含开始地位)
第二个:完结地位的索引(不包含完结地位)
不同的是这个办法不能承受负值作为参数,如果传递了一个负值,则默认应用 0
而且会主动调整参数的地位,如果第二个参数小于第一个,则主动替换

str = "abcdefghijk";
result = str.substring(1,4);
console.log(result);                            //bcd

substr()
用来截取字符串
参数:
1. 截取开始地位的索引
2. 截取的长度

str = "abcdefghijk";
result = str.substr(3,2);
console.log(result);                            //de

split()
能够将一个字符串拆分为一个数组
参数:须要一个字符串作为参数,将会依据该字符串去拆分数组

str = "abc,bcd,efg,hij";
result = str.split(",")
console.log(typeof result);

console.log(result[1]);                            //bcd
console.log(result.length);                        //4


result = str.split("d");
console.log(result.length);                        //2

如果传递一个空串作为参数,则会将每个字符都拆分为数组中的一个元素

str = "abcbcde";
result = str.split("")
console.log(result);                        // "a", "b","c","b","c","d","e"

toUpperCase()
将一个字符串转换为大写并返回,不会影响到原变量

str = "abcdefg";
result = str.toUpperCase();
console.log(result);                            //ABCDEFG

toLowerCase()
将一个字符串转换为小写并返回,不会影响到原变量

str = "ABCDEFG";
result = str.toLowerCase();
console.log(result);                            //abcdefg
退出移动版