分支结构中的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. 解决504 GATEWAY TIMEOUT Nginx网关超时

    最近遇到一个问题504 GATEWAY TIMEOUT的问题,在浏览器的NetWork里面看是这个效果.时间大概是60s. 修改nginx配置 目前后端技术架构主要是nginx和php-fpm,前端主 ...

  2. Android组件化开发-----页面路由(ARouter)

    平时开发中,我们经常用到页面跳转功能.之前我一直使用Intent过跳转 Intent intent = new Intent(A.this, B.class); intent.putExtra(&qu ...

  3. Spring Boot上传文件功能的开发

    Spring Boot上传文件功能的开发 Spring Boot使用Servlet 3的API javax.servlet.http.Part来支持文件上传.Spring Boot在类Multipar ...

  4. IDEA debug时拷贝数据 Evaluate Expression窗口

    今日份鸡汤:别人再好,也是别人.自己再不堪,也是自己,独一无二的自己.只要努力去做最好的自己,一生足矣.为自己的人生负责,为自己的梦想买单. 用IDEA调试时候经常需要拷贝变量值出来排查,特别是数据结 ...

  5. iOS SDK开发

    一款好用且设计充分的 SDK 必须要遵循以下 4 条基本原则,即: 1.SDK 安全,稳定2.统一的开发规范3.Library 小而精4.不依赖第三方 SDK安全,稳定:考虑到 SDK 是需要嵌入到 ...

  6. hdrp package导入工程

    补充: 可以直接把包提出来放一个单独文件夹 然后在package manager中load from disk,跟下面手动改效果没区别 如果发现有各种引用丢失,在工程内对包reimport下 1 需要 ...

  7. vivado2018.2封装普通IP模块

    将代码打包为一个IP模块 以FIFO代码为例:https://www.cnblogs.com/waqdgstd/p/15267726.html 1.打开向导 2.源文件和外围接口选择,这里不选AXI4 ...

  8. Go 的位操作

    在计算机内存昂贵,处理能力有限的美好旧时光里,用比较黑客范的位运算方式去处理信息是首选方式(某些情况下只能如此).时至今日,直接使用位运算仍然是很多计算领域中不可或缺的部分,例如底层系统编程,图形处理 ...

  9. Datax初使用

    为了掌握大数据采集技术,自学习了datax的使用 简介: DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.Oracle.HDFS.Hive.OceanBase.H ...

  10. Cupboard and Balloons CodeForces - 342C

    Cupboard and Balloons CodeForces - 342C 找到不变的点 抓住不确定的点进行讨论 #include<iostream> #include<cmat ...