javaScript快速入门之内建对象与包装类

内建函数的方法

call() 和 apply()

  • 都是函数对象的方法,需要通过函数对象来调用

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

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

  • call() 方法可以将实参在对象之后作为传递

  • apply() 方法需要将实参封装到一个数组中同一传递

  • function fun(a,b){
    	console.log(a);
    	console.log(b);
    	alert(this.name);
    }
    obj = {
    	name:'bob'
    	say:function(){
    		alert(this);
    	}
    };
    obj2 = {
    	name:'tom',
    	say:function(){
    		alert(this);
    	}
    }
    
    fun(); // window
    fun.call(obj); 
    fun.apply(obj); 
    
    obj.say.apply(obj2); // obj2
    
    fun.call(obj,2,3)
    
  • 总结this的情况:

    • 1.以函数形式调用时,this永远都是window
    • 2.以方法的形式调用时,this是调用方法的对象
    • 3.以构造函数的形式调用时,this是新创建的那个对象
    • 4.使用call和apply调用时,this是指定的那个对象

arguments

  • 在调用函数时,浏览器每次都会传递两个隐含的参数
    • 1.函数的上下文对象 this
    • 2.封装实参的对象 arguments
      • arguments是一个类数组的对象,可以通过索引操作数据,获取长度
      • 在调用函数时,我们所传递的实参都会封装到arguments中
      • 即使不定义形参也可以通过arguments来使用实参
      • callee属性对应一个正在当前执行的函数对象
function fun(){
	console.log(arguments);
	console.log(Aray.isArray(arguments)); // false 检查一个对象是不是数组
	console.log(arguments.length); // 1
	console.log(arguments[0]) ; // hello
	console.log(arguments == fun); // true
	
}

fun('hello');


Date对象

  • 表示时间

  • var d = new Date(); // 执行的时间
    
    // 日期格式固定
    var d2 = new Date("3/23/2020 15:00:00"); // 创建一个指定的时间
    
    // getDate() 获取当前日期对象是几号
    var data = d2.getDate();
    
    //getDay()  获取当前对象的星期几(0-6)0:周日
    var day = d2.getDay();
    
    // getMonth(); 获取当前对象的月份 , 从0开始
    var month = d2.getMonth();
    
    // getFullYear(); 获取当前对象年
    var year = d2.getFullYear();
    
    // getHours()、getMinutes()、getSeconds()
    //getTime() 获取日期的时间戳 从1970 1/1 到当前花费的毫秒数
    // 为了统一单位
    console.log(d2/1000/60/60/24/365)
    
    // 利用时间戳测试代码的性能
    time = Date.now()// 获取当前的时间戳
    

Math对象

Math不是一个构造函数,它属于一个工具类

  • 它里面封装了数学运算相关的方法和属性

  • console.log(Math.PI); // 圆周率
    Math.abs(-1); // 计算一个数的绝对值
    Math.ceil(1.4); // 2 可以对一个数进行向上取整
    Math.floor(1.4); //1 向下取整
    Math.round(1.4); //1 四舍五入
    Math.random(); // 随机生成0-1之间的随机数
    for(var i=0;i<100;i++){
    	console.log(Math.round(Math.random()*10)); // 取100个0-10之间随机整数
    	console.log(Math.round(Math.random()*8)+2); // 2-10
    }
    Math.max(12,23,12); // 23
    Math.min(12,23,12); // 12
    
    Math.pow(2,2); // 4 2的2次幂
    Math.sqrt(4); // 开方 2
    
    

String对象

底层字符串是以字符串数组的形式保存的

var str = "hello world";
console.log(str.length); 
console.log(str[1]);

charAt()

  • 返回字符串中指定位置的字符

  • var str = "hello world";
    var res = str.charAt(0); // h
    var res = str.charCodeAt(1); // 101 返回指定字符的unicode编码
    
    // frommCharCode() 根据字符编码去获取字符
    var res = String.fromCharCode(101); // e
    

concat()

  • 用来连接两个或多个字符串

  • var res = str.concat('h'); // 和 + 一样
    

indexof()

  • 该方法可以检索一个字符串中是否含有指定的内容

  • 如果字符串中含有相同的内容,返回第一次出现的索引,没有返回 -1

  • var str = "hello world";
    var res = str.indexOf('h'); // 1
    var res = str.indexOf('l',1); // 3  指定第二个参数,指定开始查找的位置
    
    // lastIndexOf()
    var res = str.indexOf('l'); // 从后面开始查找
    

slice()

  • 可以从字符串中截取指定的内容
  • 不会影响原字符串,将截取的返回
var str = "hello world";
var res = str.slice(0,2);

subString()

  • 可以用来截取一个字符串,和slice()类似

  • 不能接受负值,自动调整参数的位置 subString(1,0) -> subString(0,1)

  • var str = "hello world";
    var res = str.subString(0,2); // he
    
    // subStr() 截取字符串
    var str = "hello world";
    var res = str.ssubStr(2,2);  // 开始位置索引; 截取长度
    
    

split()

  • 将一个字符串拆分为一个数组

  • var str = "ad,asd,vasd,asd"
    // 如果传递一个空串,会将每个数组都会拆分成数组中的元素
    str.split(",");  // 需要字符串作为参数,根据参数去拆分数组
    
    可以传递一个正则表达式作为参数
    str.split(/0-9/); // 以字符串中的数字作为分隔符
    

toSupperCase()

  • 字符串大写操作

search()

  • 可以搜索字符串中是否含有指定的内容

  • str = 'asdf'
    res = str.search(/0-9/);
    

match()

  • 可以根据正则表达式,从一个字符串中将符合条件的内容提取出来
  • 默认macth只找到第一个符合要求的内容
  • 设置正则表达式为全局匹配模式,这样就可以匹配到所有的内容
  • match()会将匹配到的内容封装到一个数组中返回,即使只有一个
str = '12sdf12edasfd';
res = str.match(/[a-z]/);   // 找到第一个
res = str.match(/[a-z]/gi);  // 找到全部 

replace()

  • 可以将字符串中指定的内容替换成新的内容

  • 参数

    • 1.被替换的内容
    • 2.新的内容
    res = str.replace("a",'k')// 默认值替换第一个
    res = str.replace(/a/g,'k')// 这样就可以全部替换完成了
    

正则表达式对象

正则表达式用于定义一些字符串的规则

  • 计算机可以根据正则表达式,来检查一个字符串是否符合规则
  • 获取将字符串中符合规则的内容提取出来

创建正则表达式对象

  • test() 使用这个方法可以用来检查一个字符串是否符合正则表达式的规则,符合返回true
  • 匹配模式
    • i 忽略大小写
    • g 全局匹配模式
// 语法
var 变量 = new RegExp("正则表达式""匹配模式");


// 这个正则表达式可以检查一个字符串中是否含有 a
var reg = new RegExp('a','i');
var str = 'a';
reg.test(str); // true

使用字面量创建正则表达式

  • 使用字面量方式创建简单
  • 使用构造函数创建更加灵活
// 语法
var 变量 = /正则表达式/匹配模式
reg = /a/i; // var reg = new RegExp('a','i');

// 检查一个字符串是否含有a或b
// [a-z] 任意小写字母
// [A-Z]
reg = /a|b/i;
reg = /[ab]/i; // [ab] = a|b
reg = /a[bce]r/i; // abr acr aer

// [^ab] 除了ab其他的都行
// [0-9] 任意数字
// [^0-9] 除了数字

正则表达式语法

  • 量词:通过量词可以设置一个内容出现的次数

  • 量词只对它前面一个内容起作用

  • {n} 正好出现 n 次

  • (ab){3} ab出现3次

  • /ab{1,3}c/ b出现1-3次

  • /ab{3,}c/ b最少出现3次

  • “+” 至少一个 相当于 {1,}

  • “*” {0,}

  • “?” 0个或1个

  • “^” 表示开头

  • “$” 表示结尾

  • \w 任意字母数字下滑线

  • \W 匹配一个非单字的字符

  • \d [0-9]

  • \D ^0-9

  • \s 代表任意空白符

  • \S 匹配任意非空字符串

  • reg = /a{3}/; // 连续3个a
    
    // 检查一个字符串是否以a开头
    reg = /^a/;
    console.log(reg.test("sdfa")); //false
    
    // 检查一个字符串是否以a结尾
    reg = /a$/;
    console.log(reg.test("sdfa")); //true
    
    reg = /^a|a$/; // 以a开头或者以a结尾
    
    // 创建一个正则表达式,用来检查是否是一个合法的手机号
    // 手机号 11位  以1开头 第二位不能是0,1,2 
    reg = /^1[^{0,3}][0-9]{9}$/
    
    // 电子邮件
    // [email protected]
    // 任意字母数字下滑线
    

包装类

基本数据类型

  • String Number Boolean Null Undefined

引用数据类型

  • Object

在js中为我们提供了三个包装类,通过这三个包装类可以将基本的数据类型的数据转换为对象

  • String
    • 将一个基本数据类型字符串转换成String对象
  • Number
    • 将一个基本数据类型字符串转换成Number对象
  • Boolean
    • 将一个基本数据类型字符串转换成Boolean对象
  • 在开发中基本不会使用基本类型的对象
    • 如果使用基本数据类型进行比较时,可能会出现错误
var num = new Number(3); //创建一个Number对象
var str = new String('hi');
var bool = new Boolean(true);

// 向num中添加属性,基本数据类型不能添加属性
num.hi = 'abc';


// 浏览器会临时的使用包装类将其转换为对象,然后在调用对象的属性和方法
// 调用完成之后在将其转换成基本数据类型
var s = 10;
s = s.toString();  // 临时调用Number对象的toString
s.hello = 'hi';
console.log(s.hello); // undefined 加完之后又销毁了


据类型字符串转换成Boolean对象

  • 在开发中基本不会使用基本类型的对象
    • 如果使用基本数据类型进行比较时,可能会出现错误
var num = new Number(3); //创建一个Number对象
var str = new String('hi');
var bool = new Boolean(true);

// 向num中添加属性,基本数据类型不能添加属性
num.hi = 'abc';


// 浏览器会临时的使用包装类将其转换为对象,然后在调用对象的属性和方法
// 调用完成之后在将其转换成基本数据类型
var s = 10;
s = s.toString();  // 临时调用Number对象的toString
s.hello = 'hi';
console.log(s.hello); // undefined 加完之后又销毁了


see you again!!!

猜你喜欢

转载自blog.csdn.net/qq_42992704/article/details/105052408