学习JavaScript 第二周
分支结构中的switch
switch(值&条件表达式){
case 值:
操作;
break;
case 值:
操作;
break;
...
default:
默认操作
}
switch根据值或条件表达式来找对应的值,然后再来执行操作。如果所有的值都没有对应上,则执行default中的默认操作。
循环结构 do...while,相对于while先执行然后再判断。所以至少执行一次。
按值传递
var a = 1;
var b = a;
b = 3;
console.log(a, b); //=>a=1,b=3 深拷贝, 修改其中一个变量的值,不会影响到另一个变量的值
var c = {
name: 'sunck'
};
var d = c;
d.name = 'sunck.com';
console.log(c, d); //浅拷贝 c和d两个对象的name属性都成为了sunck.com
像下文数组中的slice和contact获取到的值,这一操作都是深拷贝,不会对原来数据产生影响。
变量提升&window全局对象污染&重复声明:
使用var关键字声明变量的时候,浏览器默认会将变量的定义提前到当前作用域(函数作用域,或则全局作用域)的最前面,但是值的定义会在引用数据类型定义的前面,而赋值留在当前,如果代码中遇到没有用var 关键字就给变量赋值的,会污染上一层作用域。
而重复声明是指一个变量重复定义,后面的值会覆盖前面的值。
for in 、forEach 、for of 这三种方式可以遍历对象;
for in 的书写格式
// 创建哈希数组
let arr = [];
arr["姓名"] = '周笔畅';
arr["职业"] = '歌手';
arr["年龄"] = 37;
console.log(arr);
for (let i in arr) {
// 遍历属性名和属性值 i为属性名 arr[i]为属性值
console.log(`${i}:${arr[i]}`);
}
但是如果for in遍历的是一个普通数组的话,会把下标作为属性名,而对应的数据作为属性值。
forEach( )方法中的参数
// forEach 迭代(遍历) 数组
var arr = [1, 2, 3];
var sum = 0;
arr.forEach(function(value, index, array) {
console.log('每个数组元素' + value);
console.log('每个数组元素的索引号' + index);
console.log('数组本身' + array);
// 累加求和
sum += value;
})
console.log(sum);
for of 的使用格式
// demo1 初体验
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9],
sum = 0;
for (var element of arr) {
sum += element;
}
console.log(sum);
// demo2 用for/of 遍历属性名连接成的字符串
var o = {
x: 0,
y: 1,
z: 2
}
keys = '';
for (var k of Object.keys(o)) {
keys += k;
}
console.log(keys); //=> 'xyz'
// demo3 用for/of 遍历属性值
var oSum = 0;
for (var k of Object.values(o)) {
oSum += k;
}
console.log(oSum); //=>3
// demo4 用两个变量来接属性名和属性值
var pairs = '';
for (var [v, k] of Object.entries(o)) {
pairs += v + k;
}
// demo5 查找字符串中字母出现的频率
console.log(pairs);
var frequency = {};
for (var letter of 'mississippi') {
if (frequency[letter]) {
frequency[letter]++;
} else {
frequency[letter] = 1;
}
}
console.log(frequency);
数组相对于变量可以存储更多的数据,数据也可以数组;它的创建有字面量法,使用构造函数创建,但是使用构造函数创建如果参数只为一个数字,则会创建一个那个数长度的空数组。
哈希数组:可以自定义下标(本质是设置数组对象的属性名和属性值),但是就没有数组长度了。
访问数组元素:arr[ '自定义属性名' ]
遍历哈希数组可以使用for in 。
哈希数组原理:将字符串,计算出一个尽量不重复的数字(地址值),如果字符串内容相同,则计算出的数字也一定是相同的
添加元素:将自定义下标交给hash算法,得到一个数字(地址值),把我的元素保存到了这个地址值之中
读取元素:将指定的自定义下标交给hash算法,得到一个和添加时完全相同的数字(地址值),根据地址值找到之前保存的东西
拓展:js里面一切的东西都是对象:除了undefined和null
常见的数组的方法(部分)
| API | 数组中的API作用 |
|---|---|
| (非破坏性方法)arr.join( ) | 将数组中的数据进行拼接,小看括号里面的参数(字符串)就是连接的字符。 |
| (非破坏性方法) arr.concat( ) | 将数组中的内容进行无缝拼接,里面可以是一串数据(数据之间用逗号分隔),或直接是一个数组。 |
| (非破坏性方法)arr.slice() | 将数组进行切片,含头不含尾,如果第二个参数不写,则表示到末尾结束(包含末尾元素),如果是-n,则表示截取到倒数第n个元素为止(第n个取得到)。 |
| arr.splice( ) | 删除:var dels=arr.splice(starti,n);//返回一个删除的元素形成的数组 插入:arr.splice(starti,0,值1,....);//1.新插入的元素占领位置,其余元素往后面移动;2.因为没有删除元素,所以返回的是一个空数组;3.不要直接插入元素,不然会形成一个部分二维数组。 替换:arr.aplice( starti,n,值1,... ) |
| arr.reverse( ) | 可以对数组进行翻转 |
释放引用类型(垃圾回收机制):
浏览器有两种垃圾回收的方法:标记清除法、引用计数法
标记清除法:函数中的变量,在函数执行完之后就会被销毁释放内存。
引用计数法:看对数据的引用次数是否为0,如果为0,就会回收;像定义了全局变量但是从来未使用的那种,就要手动设置为null进行释放内存。
学习JavaScript 第二周的更多相关文章
- 学习Java第二周
这是学习java的第二周,又这样不知不觉的结束了 上周想要学习的这一周也都做到了,可是觉得进度有些慢了,学习了: 1. 接口和抽象类: 2. 集合与数组: 3. 方法的定义: 4. 递归算法: 5.对 ...
- python学习笔记第二周
目录 一.基础概念 1.模块 1)os模块 2)sys模块 2.pyc文件 3.数据类型 1)数字 2)布尔值 3)字符串 4.数据运算 5.运算符 6.赋值运算 7.逻辑运算 8.成员运算 9.身份 ...
- Python的基础学习(第二周)
模块初始 sys模块 import sys sys.path #打印环境变量 sys.argv#打印该文件路径 #注意:该文件名字不能跟导入模块名字相同 os模块 import os cmd_res ...
- 【新生学习】第二周:卷积神经网络_part_1
DEADLINE: 2020-08-01 22:00 写在最前面: 本周学习的是卷积神经网络,是本课程重点中的重点,大家务必要熟练掌握. 本周的学习任务包括 视频学习 . 代码练习 .论文讲解 三部分 ...
- JS学习:第二周——NO.1回调函数
[回调函数] 定义:把一个函数的定义阶段,作为参数,传给另一个函数: 回调函数调用次数,取决于条件: 回调函数可以传参: 回调函数可以给变this指向,默认是window: 回调函数没有返回值,for ...
- JS学习:第二周——NO.4DOM库
DOM库封装练习 var utils = (function () { var flg = 'getComputedStyle' in window;//惰性思想的运用: function makeA ...
- JS学习:第二周——NO.3盒子模型
1.CSS盒子模型包括四个部分组成:设定的宽高+padding+border+margin: 2.JS盒子模型:通过系统提供的属性和方法,来获取当前元素的样式值 JS提供的属性和方法: clien ...
- JS学习:第二周——NO.2正则
1.[正则] 就是用来操作(匹配和捕获)的一系列规则: 匹配:校验字符串是否符合我们的规则:返回值--布尔值 匹配这里用的是正则的方法:test(),reg.text( ); 捕获 ...
- [Boolan-C++学习笔记]第二周整理
1.对于String类型的类(含有指针) 其中的指针成员能够灵活的申请存储空间,但指针操作又带来内存泄漏的风险,变更指针的操作需要尤为谨慎. 要点在于写好BigThree 构造函数 { 完成成员初始化 ...
- java基础学习笔记 第二周(面向对象)
Day01 什么是抽象数据类型:将不同数据类型的集合组成的一个整体,我们称为抽象数据类型 类就是一个抽象数据类型 成员变量:类中的数据类型就是成员变量(属性) 方法:类中的一些行为就是方法 面向过程( ...
随机推荐
- Impala 学习笔记
VALUES Statement | 6.3.x | Cloudera Documentation SELECT now() as date_DES UNION ALL SELECT trunc(no ...
- Demo of canvas, canvas optimization and svg
It used the canvas to draw the curves in the old project, and the client felt that it was vague, so ...
- spring boot 导出数据到excel
手把手教你springboot中导出数据到excel中 问题来源: 前一段时间公司的项目有个导出数据的需求,要求能够实现全部导出也可以多选批量导出(虽然不是我负责的,我自己研究了研究),我们的项目是x ...
- HDLbits——Mt2015 lfsr
1.描述电路图里面的一个子模块 Assume that you want to implement hierarchical Verilog code for this circuit, using ...
- linux内核源码编译加制作rpm包
本章主要讲解实际操作步骤,具体理论知识可以自行百度 linux内核官网下载:https://cdn.kernel.org/pub/linux/kernel/ (如图) 根据官网发布的信息分析,目前 ...
- 此平台不支持虚拟化的 Intel VT-x/EPT。不使用虚拟化的 Intel VT-x/EPT,是否继续?
1.cpu虚拟化是否打开 2.Windows安全中心>设备安全性>内核隔离
- nginx调试和location用法,匹配url
1.nginx调试输出内容到页面 location = /demo { charset utf-8; default_type text/html; return 500 "服务正在升级,请 ...
- Harbor离线安装
一.安装docker-compose 1-1. #安装方式一 curl -SL https://github.com/docker/compose/releases/download/v2.11.2/ ...
- 树莓派4B安装Gogs
https://www.labno3.com/2021/01/28/how-to-install-gogs-on-the-raspberry-pi/ https://gogs.io/docs/inst ...
- zabbix如何修改web字体
1.拷贝一个你喜欢的字体到zabbix-server的/usr/share/zabbix/assets/fonts目录下 2.cd /usr/share/zabbix vim include/def ...