转码日记——Javascript笔记(9)

函数的方法

call( ) 和apply( )方法 — 执行函数

function fun(){
    alert("我是fun函数");
}
fun.call;
fun.apply;
fun(); //这三个都是执行函数

在调用call( )和apply( )可以将一个对象指定为第一个参数,此时这个对象会成为函数执行时的this;可以用来修改函数执行时的this

function fun (){
    alert(this);
} 
fun();//如果直接调用的话,this指的是window

function fun (){
    alert(this.name);
}
var obj = {name:"obj1"};
var obj2 = {name:"obj2"};
call.fun(obj); //返回obj1
// 如果call()里面写一个对象作为参数,则函数调用时的this就指这个对象

call( )方法可以将实参在指定对象之后依次传递

var obj = {
    name:"obj1",
    age:29;
    sayName:function (a, b){alert(this);}
};
var obj2 = {};
obj.sayName.call(obj2,2,3); 
// obj.sayName是函数,调用call()方法之后函数的this是obj2这个对象
//call()写完第一个this指定的对象后,可以写函数的参数

apply( )方法不可以一个一个传实参,而是必须将实参封装进一个数组。

obj.sayName.apply(obj2,[2,3]); 

🌟 this总结:

1. 以函数方法调用时,如fun( );  this永远都是window;

2. 以方法的形式调用时,如obj.sayName( ); this是调用方法的对象,也就是obj;

3. 以构造函数的形式调用时,this是使用构造函数构造的新对象,如 var per1 = new Person();this 就是per1

4. 使用call和apply调用时,this是写在括号里的那个对象, 如fun.call( obj1); this就是obj1

arguments

在调用函数时,浏览器每次都会传递两个隐含的参数,一个是函数的上下文对象this,一个是封装参数的对象argument

argument是一个类数组对象,不是数组但是可以根据索引来操作数据并且能够获取长度。

//使用 Array.isArray()方法检查是否为数组
function fun(){
    console.log(Array.isArray(arguments)); //返回false,不是数组
}

在调用函数时,我们传递的所有参数都会封装到arguments中被保存起来。 

function fun(){
    console.log(arguments.length); //获取实参的长度
}
fun("hello",true); //返回2


function fun(){
    console.log(arguments[0]); //将封装进arguments里的第一个实参取出来
}
fun("hello",true); //返回“hello”
//即使不定义形参,也可以将实参取出

它里面有一个callee属性,该属性对应一个函数对象,就是当前正在执行的函数对象。

function fun(){
    console.log(arguments.callee == fun); 
}
fun();//返回true

Date对象 — 表示时间

//创建date对象
var d = new Date();
console.log(d);
//如果直接使用构造函数创建date对象,则会封装为当前代码执行的时间

//创建一个指定的时间对象,需要在构造函数的参数位置传递一个表示时间的字符串作为参数
var d2 = new Date("09/08/2022 21:37:01");
//格式:月/日/年 时:分:秒

方法

(1)getDate( ) — 获取当前日期对象是几日

var d2 = new Date("09/08/1996 09:10:09");
var date = d2.getDate();
console.log(date); //返回08

(2)getDay — 获取当前日期对象是星期;返回一个0-6的数字,0表示周日

var d2 = new Date("09/08/1996 09:10:09");
var date = d2.getDay();
console.log(date); //返回08

getMonth( )也是从0开始的,所以12月是11,1月是0

(3)getTime( ) — 当前日期的时间戳

时间戳,指的是从格林威治时间1970年1月1日,0时0分0秒到当前日期所花费的毫秒数(1秒= 1000毫秒); 计算机底层在保存时间时都使用时间戳。

var d = new Date("08/09/1996 09:10:09");
var time = d.getTime();
console.log(time);

Date.now( ) 可以直接获取当前时间的时间戳,可以用来测试代码的执行性能。

var time = Date.now();

Math 对象

Math和其他对象不同,它不是一个构造函数,它不需要创建对象,内部已经封装了数学计算相关的属性和方法。

Math中大写的属性都是常量,如Math.PI

(1) 小数取整

Math.ceil( ) — 上舍入,向上取整,小数位只要有值就自动进1

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

Math.floor( ) —下舍入,向下取整,小数点只要有值就舍掉

Math.round( ) — 四舍五入

(2)随机数

Math.random(  ) — 生成0-1之间的数

//生成一个0-10的数字
console.log(Math.random()*10);
//但是这样还是出来一堆小数,且原本就不包含0和1,乘10之后也不包含
//四舍五入取整
console.log(Math.round(Math.random()*10));

//生成1-10的随机数
console.log(Math.round(Math.random()*9)+1);
//生成x-y的一个随机数
console.log(Math.round(Math.random()*(y-x))+x);

(3) 幂

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

包装类

通过包装类可以将基本的数据类型转换成对象

String( )、Number( )、Boolean( )

//创建一个Number类型
var num = new Number ();
console.log(typeof num); //返回object

//向num中添加属性
num.hello = "abc";

但是一般开发中并不会使用

var bool = new Boolean(false);
if(bool){
    alert("我运行了");
}  //if判断的时候会先将object转换成boolean,所有的object转换后都是true

 当我们对一些基本数据类型的值调用属性和方法时,浏览器会临时使用包装类将其转换成对象,然后再调用对象的属性和方法。

var s = 123; //基本数据类型
//方法和属性只能添加给对象,不能添加给基本数据类型
//但是却可以使用
s = s.toString();
console.log(typeof s); //返回“123”

s.hello = "你好";
console.log(s.hello);//返回undefined
//s.hello是在调用的时候转换成了对象1,而console里的也是调用之后才产生对象2,两个不是同一个

字符串的相关方法(针对string对象)

(1)在底层字符串是以字符数组的形式保存的

var str = "Hello Cooldog";
console.log(str.length); //属性,可以用来获取字符串的长度
console.log(str[0]); //返回H

(2) charAt( ) — 可以返回字符串中指定位置的字符;该方法不会改变原字符串

var str = "hello";
var result = str.charAt(0); 
console.log(result);//返回h
//根据索引获取指定字符

var result = str.charCodeAt(0);  //返回当前字符的unicode编码

(3)String.fromCharCode( ) — 根据字符编码获取字符, 该方法是string对象下的

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

(4)indexOf( ) — 该方法可以检索一个字符串中是否含有指定内容;如果字符串中含有查找的内容,则会返回其第一次出现的索引;如果没有找到指定内容,则返回-1

var str = "hello atguigu";
var result = str.indexOf("l");
console.log(result); //返回2

//indexOf() 可以写两个参数,第二个参数是指定开始查找的位置,这个位置包含当前数字
var result = str.indexOf("l",2);

lastIndexOf( ) — 从后向前查找,返回要查找内容最后一次出现的位置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值