前端复习-javascript-一阶段

0508 day3 js

js基础语法

  1. <script src="">引入script文件
  2. REPL环境:read读→eval执行→print打印→loop循环
  3. 前端三层:结构层html,样式层css,行为层js
  4. 变量声明提升:
console.log(x);
var x , y = 2;
console.log(y);
y = 123;
<!--console输出结果为undefine 2,前者原因是变量声明提升(不会报错导致无法运行),后者原因是顺序执行,值不会覆盖-->
  1. javascript五种基本数据类型:Number, String, Boolean, Undefined, Null
  2. 二进制0b,八进制0,十六进制0x,科学计数法3e8/3e-8
  3. 进行数学运算,但结果得不到数学值的时候,输出NaN
  4. NaN是个值,typeof为Number,特点是不自等;
  5. Infinity:无穷大
  6. substring(a,b):从a到b
    substr(a,b):从a开始数b个
    charAt(a):第a个
    slice(a,b):从a到b-1
    toUpperCase():全大写
    toLowerCase():全小写
    indexOf(a):返回a出现的首个位置,0表示第一个位置
  7. typeof null 返回值为Object
  8. Number();函数
Number("123.456")//123.456
Number("");//0
Number("1+1")//NaN
Number("123123dsd")//NaN

Number(true)//1
Number(false)//0

Number(null)//0
Number(undefined)//NaN

  1. Boolean()函数
Boolean(0); //false
Boolean(NaN); //false
Boolean(Infinity); //true
Boolean(""); //false
Boolean(undefined); //false
Boolean(null); //false
Boolean(false); //false
Boolean('false'); //true
  1. parseFloat():
var a = "0123456.123n456";
console.log(parseFloat(a));//123456.123
var a = "dsahjdsai123.123";
console.log(parseFloat(a));//NaN

表达式和运算法

  1. 隐式类型转换:
3 * '4' //12
true + true //2
false + 2 //2
3 * '2天' //NaN
  1. 使用toFixed()保留小数的方法解决IEEE754造成的浮点数丢失精度问题
  2. Math函数
Math.pow();//平方
Math.sqrt();//开根号
Math.ceil();//向上取整
Math.floor();//向下取整
  1. ==判断值相等;===判断数据类型与值全部相等
  2. 短路计算
3 && 6 //6
undefined && 15 //undefined
15 && undefined //undefined
null && 2 //null
'' && 16 //''
NaN && undefined //NaN
<!--&&运算前假用前,前真用后;||同理,前真用前,前假用后-->
  1. 优先级:非>与>或
3 && 4 || 5 && 6 //结果为4
!0 //true
!1 //false

0509 辅修 摸了一天鱼

0510 day4 考完试 继续学习js

知识点(有点难了QAQ)

  1. 随机数函数:
<!--得到[a,b]之间的随机整数,其中Math.random()生成(0,1)之间的小数-->
parseInt(Math.random()*(b-a+1))+a;
  1. continue label;:立即跳过label所在循环的 当前的这次循环,并继续label所在循环的下一次循环
    使用方法:
outer: for(){
    for(){
        blabla;
        continue outer;
    }
}
  1. 使用arr.isArray()方法或鸭式辨型判断数组
  2. 数组常用方法:
var arr = [1,2,3,4,5];
arr.push(6);//数组末尾添加6,插入多项需要用逗号分割
var item = arr.pop();//弹出数组末尾的项,并且该项可以被赋值给其他定义的变量。不需要参数
arr.unshift(0);//在数组起始位置添加项,可以添加多项
arr.shift();//删除首项,被删除的项可以被变量接收。不需要参数

join()方法:将数组以自定义方式转为字符串
arr.join();//1,2,3,4,5  相当于toString()
arr.join("-");//1-2-3-4-5
arr.join("");//12345

split()方法:将字符串以自定义方式转为数组 var str = 'qwer';
str.split();//["qwer"]  注:一般参数不留空,留空的话数组只有唯一一项,即字符串内容
str.split('');//["q","w","e","r"] 以空字符串分割
'q,w,e,r'.split(',');//["q","w","e","r"] 以逗号分割

concat()方法:合并连接多个数组
var arr1 = [1,2,3,4];
var arr2 = [5,6,7];
var arr3 = [8,9];
var arr = arr1.concat(arr2,arr3,...);//返回值为合并的数组,不会改变原数组

splice()方法:splice意思是拼接,是个多功能算法
arr.splice(3,2);//[1,2,3,6]功能一:删除指定位置指定数量的项 从3号位置开始删除,删除数量为2,其余数组元素顺序不变
arr.splice(3,2,44,55,66);//[1,2,3,44,55,66,6] 功能二:删除并替换项 从3号位置开始删除,删除数量为2,并由44,55,66在原位置进行替换
arr.splice(3,0,44,55,66);//[1,2,3,44,55,66,4,5,6]功能三:插入项 第二个参数为0时,可以实现在指定位置插入项
注:可以使用变量接收splice()方法删除的项

slice()方法:截取数组部分
var newArr = arr.slice(3,5);//[4,5] 从3号位开始,到5号位结束,不包括5号位
var newArr = arr.slice(3);//[4,5,6] 从3号位开始,截取后续所有
var newArr = arr.slice(3,-1);//[4,5] 从3号位开始,到最后一位结束,不包括最后一位

reverse()方法:数组元素顺序反转
indexOf();//搜索数组中某个元素的位置,返回值为下标,不存在则返回-1
includes();//判断数组中是否存在某个元素,返回值为布尔值
sort();//内置的排序函数
  1. 堆内存&引用类型
var arr1 = [1,2,3,4];
var arr2 = arr1;
arr1.push(5);
console.log(arr1);
console.log(arr2);
//输出结果为:[1,2,3,4,5]和[1,2,3,4,5],原因是数组不属于基础数据类型,且较为庞大,因此使用堆内存;而arr2 = arr1是引用类型,赋值时直接将arr2指向了堆内存中分配给arr1的地址,因此arr1的值改变时arr2也会改变
[1,2,3] == [1,2,3] //false 
[] == [] //false 
var arr = [1,2,3]; arr = arr //true
var newArr = arr; arr = newArr //true
二者都是因为引用类型进行比较时,不判断值是否相同,而判断地址是否相同

总结:
当var a = b变量传值时:基础类型会在内存中产生新的副本;而数组、对象等引用类型不会产生新的副本,而是将新变量指向同一个地址;
当用==比较时:基础类型会比较值是否相等;而引用类型会比较内存地址是否相同,即比较的是否是同一个对象

解决引用类型造成数组无法复制的问题:浅克隆(循环推入数组每一项(当数组中存在项为数组时,会“藕断丝连”,即仍旧存在result[3] == arr1[3]))、深克隆:递归

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值