学习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 什么是抽象数据类型:将不同数据类型的集合组成的一个整体,我们称为抽象数据类型 类就是一个抽象数据类型 成员变量:类中的数据类型就是成员变量(属性) 方法:类中的一些行为就是方法 面向过程( ...
随机推荐
- idea插件Tranlation配置有道搜索引擎
idea配置有道翻译引擎 一.更换翻译引擎原因 由于Google在2022年9月末宣布关闭GoogleTranslate在中国的服务,原本在chrome浏览器和idea上使用的google翻译引擎也不 ...
- GoogleAdMob
写在最开始==================>一定要确定好中介和GoogleAdMob的版本对应关系 由于GoogleAdMob对接的官方文档是叫你去下载旧版的SDK,然后就很容易就弄混了版本 ...
- c# winform调用osk系统自带软键盘
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- [Jquery]如何绑定相同id的所有元素?
Jquery中相同的id不能用$()获得,只能获得第一个匹配的元素. 原因:id不可重复 解决方案: 方案1: 通过 $("input[id='xxxx']"); 可以选择多个相同 ...
- wamp+phpstrom+Xdebuge helper(google)
一.软件安装两个软件的安装和第三个浏览器插件就不再赘述,网上有很多详细的教程,自行百度. 二.配置步骤1.wampwamp的优势在于自带xdebuge的dll文件,所以不需要在官网根据版本下载,具体位 ...
- 使用Swagger和OpenAPI 3规范定义API接口并集成到SpringBoot
1. OpenAPI 3 规范介绍及属性定义 参考官方定义:https://swagger.io/specification/ 2. 使用OpenAPI 3规范定义API接口 官方样例参考:https ...
- 指针和指针运算符一起时的运算规则(比如*p++和*++p的区别)
接下来,通过示例彻底理解自增运算符的两种用法(自减的用法与之类似,只不过是加1变成了减1). 1.++i和i++的区别 如清单1(注意代码中的注释): #include <stdio.h> ...
- Json数组转List
List<Person> list = obj.list.ToObject<List<Person>>()
- c语言学习--静态函数
静态函数 #include<stdio.h> //这是静态函数, 静态函数只能在当前文件调用,其他文件下面的函数是没法调用到这个函数的 static void fun1() { print ...
- 微信小程序 - canvas实现多行文本 ,实现文本断行
1.canvas绘制文本坑点 绘制的文本不管多长,永远只有一行,不会断行. 2.解决思路 根据每行文本字数来断行,超出的就向下排列. 由于 canvas绘制文本的语法如下: context.fillT ...