分支结构中的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 第二周的更多相关文章

  1. 学习Java第二周

    这是学习java的第二周,又这样不知不觉的结束了 上周想要学习的这一周也都做到了,可是觉得进度有些慢了,学习了: 1. 接口和抽象类: 2. 集合与数组: 3. 方法的定义: 4. 递归算法: 5.对 ...

  2. python学习笔记第二周

    目录 一.基础概念 1.模块 1)os模块 2)sys模块 2.pyc文件 3.数据类型 1)数字 2)布尔值 3)字符串 4.数据运算 5.运算符 6.赋值运算 7.逻辑运算 8.成员运算 9.身份 ...

  3. Python的基础学习(第二周)

    模块初始 sys模块 import sys sys.path #打印环境变量 sys.argv#打印该文件路径 #注意:该文件名字不能跟导入模块名字相同 os模块 import os cmd_res ...

  4. 【新生学习】第二周:卷积神经网络_part_1

    DEADLINE: 2020-08-01 22:00 写在最前面: 本周学习的是卷积神经网络,是本课程重点中的重点,大家务必要熟练掌握. 本周的学习任务包括 视频学习 . 代码练习 .论文讲解 三部分 ...

  5. JS学习:第二周——NO.1回调函数

    [回调函数] 定义:把一个函数的定义阶段,作为参数,传给另一个函数: 回调函数调用次数,取决于条件: 回调函数可以传参: 回调函数可以给变this指向,默认是window: 回调函数没有返回值,for ...

  6. JS学习:第二周——NO.4DOM库

    DOM库封装练习 var utils = (function () { var flg = 'getComputedStyle' in window;//惰性思想的运用: function makeA ...

  7. JS学习:第二周——NO.3盒子模型

    1.CSS盒子模型包括四个部分组成:设定的宽高+padding+border+margin: 2.JS盒子模型:通过系统提供的属性和方法,来获取当前元素的样式值   JS提供的属性和方法: clien ...

  8. JS学习:第二周——NO.2正则

    1.[正则] 就是用来操作(匹配和捕获)的一系列规则: 匹配:校验字符串是否符合我们的规则:返回值--布尔值           匹配这里用的是正则的方法:test(),reg.text( ); 捕获 ...

  9. [Boolan-C++学习笔记]第二周整理

    1.对于String类型的类(含有指针) 其中的指针成员能够灵活的申请存储空间,但指针操作又带来内存泄漏的风险,变更指针的操作需要尤为谨慎. 要点在于写好BigThree 构造函数 { 完成成员初始化 ...

  10. java基础学习笔记 第二周(面向对象)

    Day01 什么是抽象数据类型:将不同数据类型的集合组成的一个整体,我们称为抽象数据类型 类就是一个抽象数据类型 成员变量:类中的数据类型就是成员变量(属性) 方法:类中的一些行为就是方法 面向过程( ...

随机推荐

  1. Impala 学习笔记

    VALUES Statement | 6.3.x | Cloudera Documentation SELECT now() as date_DES UNION ALL SELECT trunc(no ...

  2. 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 ...

  3. spring boot 导出数据到excel

    手把手教你springboot中导出数据到excel中 问题来源: 前一段时间公司的项目有个导出数据的需求,要求能够实现全部导出也可以多选批量导出(虽然不是我负责的,我自己研究了研究),我们的项目是x ...

  4. HDLbits——Mt2015 lfsr

    1.描述电路图里面的一个子模块 Assume that you want to implement hierarchical Verilog code for this circuit, using ...

  5. linux内核源码编译加制作rpm包

    本章主要讲解实际操作步骤,具体理论知识可以自行百度 linux内核官网下载:https://cdn.kernel.org/pub/linux/kernel/   (如图) 根据官网发布的信息分析,目前 ...

  6. 此平台不支持虚拟化的 Intel VT-x/EPT。不使用虚拟化的 Intel VT-x/EPT,是否继续?

    1.cpu虚拟化是否打开 2.Windows安全中心>设备安全性>内核隔离

  7. nginx调试和location用法,匹配url

    1.nginx调试输出内容到页面 location = /demo { charset utf-8; default_type text/html; return 500 "服务正在升级,请 ...

  8. Harbor离线安装

    一.安装docker-compose 1-1. #安装方式一 curl -SL https://github.com/docker/compose/releases/download/v2.11.2/ ...

  9. 树莓派4B安装Gogs

    https://www.labno3.com/2021/01/28/how-to-install-gogs-on-the-raspberry-pi/ https://gogs.io/docs/inst ...

  10. zabbix如何修改web字体

    1.拷贝一个你喜欢的字体到zabbix-server的/usr/share/zabbix/assets/fonts目录下 2.cd  /usr/share/zabbix vim include/def ...