JS “内置对象(补充)、简单数据类型和复杂数据类型” 笔记

2022.7.10 周日学习记录博客。今日学习时长:约3.5h。学习进度:内置对象(字符串对象)、简单数据类型和复杂数据类型。

目录

内置对象

6.字符串对象

6.1 基本包装类型

6.2 字符串的不可变

6.3 根据字符返回位置

6.4 根据位置返回字符(重点)

6.5 字符串操作方法(重点)

6.6 替换字符串、字符串转换成数组

简单数据类型 与 复杂数据类型

1.简单类型和复杂类型

2.堆和栈

3.简单类型的内存分配

4.复杂类型的内存分配

6.复杂类型传参


内置对象

目录

  • 内置对象
  • 查文档
  • Math对下
  • 日期对象
  • 数组对象
  • 字符串对象

6.字符串对象

6.1 基本包装类型

为了方便操作基本数据类型,JS 还提供了三个特殊的引用类型:String、Number 和 Boolean。

基本包装类型就是把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法。

按道理基本数据类型是没有属性和方法的,而对象才有属性和方法,上面代码中却可以执行,是因为 JS 会把基本数据类型包装成为复杂数据类型,其执行过程如下:

6.2 字符串的不可变

指的是里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,在内存中新开辟了一个内存空间。

6.3 根据字符返回位置

字符串所有的方法,都不会修改字符串本身(字符串是不可变的),操作完成会返回一个新的字符串。

// 根据字符返回位置,str.indexOf('要查找的字符',[起始的位置])
var str = '改革春风吹满地,春天来了';
console.log(str.indexOf('春'));     // 返回“2”
console.log(str.indexOf('春',3));   // 返回“8”,从索引号是3的位置开始从前往后查找

//案例:查找字符串'abcoefoxyozzopp'中 所有O出现的位置以及次数
//核心算法:先查找第一个O出现的位置
//然后 只要indexOf 返回的结果不是 -1 就继续往后查找
//因为 indexOf 只能查找到一个,所以需要利用循环,在当前索引加1后继续查找
var str = 'abcoefoxyozzopp';
var index = str.indexOf('o');
var num = 0;
while(index !== -1){
    console.log(index);
    num++;
    index = str.indexOf('o',index + 1);
}
console.log('o出现的次数是:' + num);

6.4 根据位置返回字符(重点)

//1.charAt(index) 根据位置返回字符
var str = 'andy';
console.log(str.charAt(3));    //返回y
//遍历所有字符
for(var i = 0;i < str.length;i++){
    console.log(str.charAt(i));
}

//2.charCodeAt(index) 返回相应索引号的字符ASCII值。 通常用途:判断用户按下了键盘的什么键
console.log(str.charCodeAt(0));    //97(97是a的ASCII值)
//3.str[index]    H5中新增的
console.log(str[0]);    //返回a

案例:返回字符位置

判断一个字符串‘abcoefoxyozzopp’中出现次数最多的字符,并统计其次数

  • 核心算法:利用 charAt()遍历这个数组
  • 把每个字符都存储给对象的属性,如果对象没有该属性,就为1,如果存在了就 +1
  • 遍历对象,得到最大值和该字符
var str = 'abcoefoxyozzopp';
var o ={};
for (var i = 0;i < str.length;i++){
    var chars = str.charAt(i);    //chars 是字符串的每一个字符
    if(o[chars]){    //o[chars] 返回的是属性值
        o[chars]++;    
    }else{
        o[chars] = 1;    
    }
}    
console.log(o);
//2. 遍历对象
var max = 0;
var ch ='';
for (var k in o){
    // k 得到的是属性名
    //o[k] 得到的是属性值
    if (o[k] > max){
        max = o[k];
        max = o[k];
        ch = k;    
    }
}
console.log(max);
console.log('最多的字符是' + ch);

6.5 字符串操作方法(重点)

//1.concat('字符串1','字符串2'.....)
var str = 'andy';
console.log(str.concat('red'));    //返回结果 andyred
//2.substr('截取的起始位置','截取几个字符');
var str1 = '改革春风吹满地';
console.log(str1.substr(2,2));    //第一个2是索引号的2;第二个2是取几个字符

6.6 替换字符串、字符串转换成数组

  • 替换字符 :replace(‘被替换的字符’,‘替换为的字符’)。 replace运算符只会替换遇到的第一个字符
  • 字符转换为数组:split(‘分隔符’)。(之前学过 join 把数组转换为字符串)
//1.替换字符 replace('被替换的字符','替换为的字符');
var str - 'andyandy';
console.log(str.replace('a','b'));    //输出:bndyandy。第二个a不替换
//案例:将字符串'abcoefoxyozzopp' 里所有的 o 替换为 *
var str1 = 'abcoefoxyozzopp';
while (str1.indexOf('o') !== -1){
    str1 = str1.repkace('o','*');
}
console.log(str1);

//2.字符转换为数组 split('分隔符');
var str2 = 'red,pink,blue';
console.log(str2.split(','));    //返回数组 ['red','pink','blue'];
var str3 = 'red&pink&blue';
console.log(str3.split('&'));    //返回数组 ['red','pink','blue'];

简单数据类型 与 复杂数据类型

复习target

  • 能说出简单数据类型的内存分配
  • 能说出复杂数据类型的内存分配
  • 能说出简单类型如何传参
  • 能说出复杂类型如何传参

目录

  • 简单类型与复杂类型
  • 堆和栈
  • 简单类型的内存分配
  • 复杂类型的内存分配
  • 简单类型传参
  • 复杂类型传参

1.简单类型和复杂类型

简单类型又叫做基本数据类型或者值类型,复杂类型又叫做引用类型。

  • 值类型:简单数据类型 / 基本数据类型,在存储时变量中存储的是值本身,因此叫做值类型。string,number,boolean,undefined,null,(symbol)
  • 引用类型:复杂数据类型,在存储时变量中存储的仅仅是地址(引用),因此叫做引用数据类型。包括通过 new 关键字创建的对象(系统对象、自定义对象) 如 Object、Array、Date等

2.堆和栈

堆和栈的分配区别:

1、栈(操作系统):有操作系统自动分配释放存放函数的参数值、局部变量的值等。其操作方式类似与数据结构中的栈;简单数据类型存放到栈里面。

2、堆(操作系统):存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收。复杂数据类型存放到堆里面。

3.简单类型的内存分配

  • 包括:string,number,boolean,undefined,null,(symbol)
  • 简单类型变量的数据直接存放在变量(栈空间)中

4.复杂类型的内存分配

  • 引用类型:通过 new 关键字创建的对象(系统对象、自定义对象) 如 Object、Array、Date等。
  • 引用类型变量在栈空间里存放地址,而真正的对象实例存放在堆空间中。

5.简单类型传参

函数的形参也可以看做是一个变量,当我们把一个值类型变量作为参数传给函数的形参时,其实是把变量在栈空间里的值复制了一份给形参,那么在方法内部对形参做任何修改,都不会影响到外部的变量。

function fn(a){
    a++;
    console.log(a);
}
var x = 10;
fn(x);
console.log(x);    
//第一个打印 输出的是11
//第二个打印 输出的是10

6.复杂类型传参

函数的形参也可以看做是一个变量,当我们把一个引用类型变量作为参数传给函数的形参时,其实是吧变量在栈空间里保存的堆地址复制给了形参,形参和实参其实保存的是同一个堆地址,所以操作的是同一个对象。

function Person(name){
    this.name= name;
}
function f1(x) {            // x = p; 把p引用地址传递给了X
    console.log(x.name);    //2. 输出 刘德华
    x.name='张学友';
    console.log(x.name);    //3.输出 张学友
}
var p =new Person('刘德华');    
console.log(p.name);        //1.输出 刘德华
f1(p);
console.log(p.name);        //4.输出 张学友

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值