DNS | Array | Object | Map | Set | iterable ---[廖雪峰老师js教程笔记]
来源:互联网 发布:虚拟机网络连接模式 编辑:程序博客网 时间:2024/06/05 15:08
一.DNS协议
1.DNS提供什么服务?——域名与IP地址之间的解析服务(正逆均可)。
2.DNS存在的原因?——对于计算机而言,它更擅长通过一长串数字(IP地址)来访问对方的计算机;而对于人类来说,字母+数字的组合更方便记忆,因此用户使用主机名或域名来访问对方的计算机。
【廖雪峰老师的JavaScript教程】
https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000
二.基本知识点
1.ECMAScript是一种语言标准,而JavaScript是网景公司对ECMAScript标准的一种实现。
2.为什么不直接将JavaScript作为一种标准?因为JavaScript是网景的注册商标。
3.没有必要显式设置<script>标签的属性:type ="text/javascript"的原因?因为默认的type就是JavaScript。
4.出于浏览器的安全限制,以file://
开头的地址无法执行如联网等JavaScript代码;需要架设一个Web服务器,然后以http://开头
的地址来正常执行所有JavaScript代码。
5.遇到过多的嵌套,可以将部分代码抽离出来,作为函数来调用,从而减少代码的复杂度。
6.计算机:可以做数学计算的机器。
7.0/0 //NaN(Not a Number)
8.唯一能判断NaN的方法是通过isNaN()函数—-isNaN(NaN); //true
9.浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数。
1 / 3 === (1 - 2 / 3); //false Math.abs(1 /3 - (1 - 2 /3)) < 0.000001; //true
10.null
表示一个”空”的值 ; 0
表示一个数值 ; ''
表示长度为0的字符串。undefined表示"未定义"。null适用于大多数情况下,undefined仅仅在判断函数参数是否传递的情况下使用。
11.数组是一组按顺序排列的集合,集合的每个值成为元素。JavaScript的数组可以包括任何数据类型。
12.JavaScript的对象是一组由键-值对组成的无序集合。
13.在JavaScript中,使用等号=
对变量进行赋值。可以将任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量。
var a = true; a = 'yyc'; a = null; a;//null
14.动态语言:变量本身的数据类型不固定的语言。
15.转义字符存在的原因?因为JavaScript的字符串是由单引号或双引号括起来的字符表示的。如果要呈现出字符串内部的单引号或者双引号,则需要使用转义字符\。”一词多义”—为常规的”字符”赋予特殊的含义。如:
var way1 = "l'm a boy";var way2 = 'l\'m a boy';'\u4e2d\u6587'; //"中文"
16.
alert(`1234`);//反引号//output:1234
17.模板字符串
var name = 'Gerg';var age = 21;var message = '你好,' + name + ',你今年' + age + '岁了!';console.log(message);//你好,Gerg,你今年21岁了!var name = 'Gerg';var age = 21;var message = `你好,${name},你今年${age}岁了!`;console.log(message);//你好,Gerg,你今年21岁了!
18.字符串是不可变的:
var s = 'test';s[0] = 'y';console.log(s);//"test"
19.JavaScript为字符串提供了一些常用的方法,调用这些方法不会改变原始字符串的内容,而是返回一个新的字符串。
a) toUpperCase()---把一个字符串全部变为大写b) toLowerCase()---把一个字符串全部变为小写c) indexOf()---搜素指定字符串出现的首个位置: var s = 'Hello world'; s.indexOf('l');//2 s.indexOf('L');//-1d)substring()返回指定索引区间的子串: var s = 'Hello world'; s.substring(0,4);//"hell"----[0,4) s.substring(4);//"o world"----[4,end]
三.数组(Array)
1.直接给Array的length赋一个新的值会改变Array:
var arr = [1,2,3]; arr.length;//3 arr.length = 5; arr;//[1,2,3,undefined,undefined] arr.length = 2; arr;//[1,2];
2.Array可以通过索引将对应的元素修改为新的值:
var arr = [1,2,3]; arr[1] = 'y'; arr;//[1,'y',3]; arr[4] = 'c'; arr;//[1,'y',3,undefined,'c']
3.但在编写代码的时候,不建议直接修改Array的大小,访问索引时要确保索引不会越界。
4.与String类似,Array也可以通过indexOf()来搜索一个指定的元素出现在数组中的首个位置:
var arr = ['y','y','c']; arr.indexOf('y');//0 arr.indexOf(1);//-1---因为,数组中不存在数值1这个元素
5.数组的slice()方法就是对象String的substring()方法,截取Array的部分元素,然后返回一个新的Array:
var s1 = 'Hello world'; var arr;arr = s1.split('');//["H", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d"]arr.slice(3,7);//[3,7)//(4) ["l", "o", " ", "w"]arr.slice(7);//[7,end]/(4) ["o", "r", "l", "d"]
6.如果不给slice()传递任何参数,它就会从头到尾截取数组中的所有元素。—使用这个特性,可用来复制一个Array。
var arr = [1,2,3,4,5,6];var aCopy = arr.slice();aCopy;//(6) [1, 2, 3, 4, 5, 6]
7.push() | pop()
1.push()向Array末尾添加若干元素: var arr = [1,2,3]; arr.push('y','y','c');//6 arr; //(6) [1, 2, 3, "y", "y", "c"]2.pop()把Array的最后一个元素删掉: var arr = [1,2]; arr.pop();//2 arr;//[1] arr.pop();//1 arr;//[] arr.pop();//undefined arr;//[]
8.unshift() | shift()
1.unshift()向Array头部添加若干元素: var arr = [1,2,3]; var arr2 = arr.unshift('y','y','c'); arr2;//6 arr; //(6) ["y", "y", "c", 1, 2, 3]2.shift()将Array的第一个元素删掉: var arr = [1,2,3]; arr.shift(); arr; //[2,3]
9.sort()
1.sort()对当前Array进行排序,它会直接修改当前Array的元素的位置。var arr = ['b','a','c'];arr.sort();arr;//["a", "b", "c"]
10.reverse()
var arr = [1,2,3];arr.reverse();arr;//[3, 2, 1]
11.splice()—-修改Array的”万能方法”
1.删除---指定(位置 + 数量)var arr = [0,1,2,3,4,5];//删除数组中的三个元素,其索引值为2,3,4arr.splice(2,3);//[2,3,4]---删除arr;//[0, 1, 5]2.不光删除,还能添加若干元素:var arr = [0,1,2,3,4,5];arr.splice(2,3,'y',true);//[2, 3, 4]---删除arr;//[0, 1, "y", true, 5]3.不删,只加var arr = [0,1,2,3,4,5];arr.splice(2,0,'add');//[]arr;[0, 1, "add", 2, 3, 4, 5]
12.concat()
要使当前Array与另一个Array连接起来,使用concat():var arr1 = [1,2];var arr2 = [3,4];var add = arr1.concat(arr2);add;//[1, 2, 3, 4]//concat()方法并没有修改arr1,而是返回一个新的Array.arr1;//(2) [1, 2]arr2;//(2) [3, 4]concat()方法可以接受任意个元素和Array,并自动把Array拆开,然后全部添加到新的Array里:var arr = [1,2,3];arr.concat([true,'y'],null,'string');//[1, 2, 3, true, "y", null, "string"]arr;//[1,2,3]
13.join()
1.join()方法将当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串:var arr = ['y','y','c',1,2,3];arr.join('--');//"y--y--c--1--2--3"arr;//["y", "y", "c", 1, 2, 3]---并没有改变原始数组2.如果Array中的元素不是字符串,将自动转换为字符串后再连接。
14.多维数组—数组中某个元素也是数组
var arr = [[1,2,3],['y','y','c'],'-'];arr[1][2];//"c"
四. 对象
1.若对象的属性名中存在特殊字符,就必须用单或双引号将其括起来,同时必须用[‘string’]的方式来访问该属性。不过,为了方便起见,属性名尽量使用标准的变量名,直接通过点表示法来访问一个属性。
var Person = { name: 'Gerg', 'nominal-age':22};Person.name;//"Gerg"Person.nominal-age;//VM239:1 Uncaught ReferenceError: age is not definedPerson['nominal-age'];//22
2.可以用in操作符检测该对象中是否存在某一属性
var Person = { name: 'Gerg', age: 21};'name' in Person;//true//如果in判断一个属性存在,这个属性不一定就是该对象的,它可能是该对象继承而来的:'toString' in Person;//true
3.判断一个属性是该对象本身拥有的还是继承而来的,可使用hasOwnProperty()方法:
var Person = { name: 'Gerg', age: 21};Person.hasOwnProperty('age');//truePerson.hasOwnProperty('toString');//false
五. 条件判断
1.if…else…语句执行的特点是二选一.
2.JavaScript将null,undefined,0,NaN和空字符串''
视为false,其他值一概为true.
Boolean(null);//falseBoolean(undefined);//falseBoolean(0);//falseBoolean(NaN);//falseBoolean('');//false
3.for…in循环,可以把一个对象中的所有属性依次循环出来:
var Person = { name: 'Gerg', age: 21, city: 'Shanghai'};for(var key in Person){ console.log(key);}>>>nameagecity
想要过滤掉对象的继承属性,可用hasOwnProperty()来实现:
var Person = { name: 'Gerg', age: 21, city: 'Shanghai'};for(var key in Person){ if(Person.hasOwnProperty(key)){ console.log(key); }}>>>nameagecity
5.当对象为Array时:
var person = ['Gerg',21,'Shanghai'];//下列表示方式仅用于理解var Person ={ 0:'Gerg', 1:21, 2:'Shanghai'};for(var i in person){ console.log(i);}>>>"0""1""2"for(var i in person){ console.log(person[i]);}>>>"Gerg""21""Shanghai"//for...in对Array的循环得到的是String而不是Number
6.while—条件满足,不断循环; 否则,退出循环。
//从小[1]到大[99]var sum = 0;var i = 1;while(i < 100){ sum += i; i = i + 2;}console.log(sum);//2500//从大[99]到小[1]var sum = 0;var i = 99;while(i > 0){ sum += i; i = i -2;}console.log(sum);//2500//for循环var sum = 0;for(var i = 1;i < 100;i = i + 2){ sum += i;}console.log(sum);//2500var sum = 0;for(var i = 99;i > 0;i = i - 2){ sum += i;}console.log(sum);//2500
7.do…while—先斩后奏型—先执行一次大括号中的语句,再检测判断条件。
var n = 0;do{ n++;}while(n < 100);console.log(n);//100
8.
//for---正序var arr = ['yyc','asan','pangzi'];for(var i = 0;i < arr.length;i++){ console.log(arr[i]);}>>>yycasanpangzi//for---逆序var arr = ['yyc','asan','pangzi'];for(var i = arr.length-1;i > -1;i--){ console.log(arr[i]);}>>>pangziasanyyc//while---正序var arr = ['yyc','asan','pangzi'];var i = 0;while(arr[i]){ console.log(arr[i]); i++;}>>>yycasanpangzi//while---逆序var arr = ['yyc','asan','pangzi'];var i = arr.length;while(arr[i-1]){ console.log(arr[i-1]); i--;}>>>pangziasanyyc
六 Map | Set
1.Map
1.是什么?Map是一组键值对的结构,具有极快的查找速度。2.为什么存在?对象的属性(键)必须是字符串。但是Number或其他数据类型作为键也是合理的。
2.使用Array实现:根据同学的姓名来查找对于的成绩
常规方法:两个Array,一个保存姓名,一个保存成绩。 var names = ['yyc','asan','tuhao']; var scores = [90,95,100];Map实现 var m = new Map([['yyc',90],['asan',95],['tuhao',100]]); m.get('asan');//95
3.Map拥有的方法:增(set) | 删(delete) | 判(has) | 查(get)
var m = new Map();m.set('yyc',66);//Map(1) {"yyc" => 66}m.set('asan',88);//Map(2) {"yyc" => 66, "asan" => 88}m.has('yyc');//truem.get('yyc');//66m.delete('yyc');//truem.get('yyc');//undefined
4.由于一个key只能对应一个value,因此多个value存入一个key,”长江后浪推前浪”
var m = new Map();m.set('yyc','前浪');m.set('yyc','后浪');m.get('yyc');//"后浪"
5.Set与Map类似,也是一组Key的集合,但不存储value。由于Key不能重复,所以可用Set去重。
function dedup(arr){ return Array.from(new Set(arr));}dedup([1,2,3,4,3,2,1]);//[1, 2, 3, 4]
6.Set对象的方法:
var s = new Set([1,2,3,3,3,'3']);s;//Set(4) {1, 2, 3, "3"}s.add(4);s;Set(5) {1, 2, 3, "3", 4}s.add(4);s;Set(5) {1, 2, 3, "3", 4}s.delete('3');//trues;//Set(4) {1, 2, 3, 4}
七 iterable(迭代的,遍历的)
1.Array | Map | Set 都属于iterable类型。
2.具有iterable类型的集合可以通过新的for…of循环来遍历。
//Arrayvar a = ['a','b','c'];for(var i of a){ console.log(i);}>>>abc//Mapvar m = new Map([['yyc',90],['asan',95],['tuhao',100]]);for(var i of m){ console.log(i);}>>>(2) ["yyc", 90](2) ["asan", 95](2) ["tuhao", 100]//Setvar s = new Set(['A','B','C']);for(var i of s){ console.log(i);}>>>ABC
3.for…in | for…of 区别?
var a = ['a','b','c'];a.name = 'Gerg';for(var i in a){ console.log(i);}>>>012nameconsole.log(a.length);//3***而for...of循环只循环集合本身的元素var a = ['a','b','c'];a.name = 'Gerg';for(var i of a){ console.log(i);}console.log(a.length);>>>abc3
4.更好的方式:使用iterable内置的forEach方法,接收一个函数,每次迭代都自动回调该函数。
//Arrayvar a = ['a','b','c'];a.forEach(function(element,index,array){ console.log(element);});>>>abcvar a = ['a','b','c'];a.forEach(function(element,index,array){ console.log(index);});>>>012var a = ['a','b','c'];a.forEach(function(element,index,array){ console.log(array);});>>>["a", "b", "c"]["a", "b", "c"]["a", "b", "c"]//Setvar s = ['A','B','C'];s.forEach(function(element,set){ console.log(element);});>>>ABCvar s = ['A','B','C'];s.forEach(function(element,set){ console.log(set);});>>>012//Mapvar m = new Map([['yyc',90],['asan',95],['tuhao',100]]);m.forEach(function(value,key,map){ console.log(value);});>>>9095100var m = new Map([['yyc',90],['asan',95],['tuhao',100]]);m.forEach(function(value,key,map){ console.log(key);});>>>yycasantuhaovar m = new Map([['yyc',90],['asan',95],['tuhao',100]]);m.forEach(function(value,key,map){ console.log(map);});>>>Map(3) {"yyc" => 90, "asan" => 95, "tuhao" => 100}Map(3) {"yyc" => 90, "asan" => 95, "tuhao" => 100}Map(3) {"yyc" => 90, "asan" => 95, "tuhao" => 100}
- DNS | Array | Object | Map | Set | iterable ---[廖雪峰老师js教程笔记]
- 廖雪峰老师JS教程读书笔记(一):JS继承
- 廖雪峰老师git教程笔记(1)
- [笔记1]---廖雪峰老师的Git教程
- [笔记2]---廖雪峰老师的Git教程
- 廖雪峰JavaScript教程笔记——map/reduce
- Git笔记(廖雪峰老师课程)
- 廖雪峰老师JS教程读书笔记(二):原生AJAX与跨域总结
- 廖雪峰老师JS教程读书笔记(三):attr()和prop()和is()
- 廖雪峰教程笔记补遗
- 廖雪峰Git教程笔记
- 廖雪峰 Python教程 笔记
- 学习廖雪峰老师的python之map练习
- JavaScript --Map和Set, Iterable
- js遍历集合(Array,Map,Set)
- 廖雪峰老师git学习笔记(2)
- 学习廖雪峰老师的git课程笔记(一)
- 学习廖雪峰老师的课程笔记(二)
- 不得不看!史上最全的三十多张架构师图谱!
- java webservice
- spring boot cache理论详解
- 事件委托
- C#连接sql server数据库
- DNS | Array | Object | Map | Set | iterable ---[廖雪峰老师js教程笔记]
- 637. Average of Levels in Binary Tree
- Block的内部实现原理
- java的持久化技术选型
- win7 批处理文件默认以管理员身份运行及清除IE缓存脚本
- Unity制作游戏中技能使用后转CD的场景
- 将一个本地项目提交到git
- 数据结构 — 希尔排序
- c#一些概念