JS学习笔记
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
1.js代码一般放在<head>中,有两种方式
:一种实在<script></script>中直接写,另一种是在<script src="..."></script>中引入一个单独的js文件2.注释:
(1)// (2)/* */3.数据类型:
(1)Number:整数和浮点数 (2)字符串:''和"" (3)布尔值:true和false (4)比较运算符:==和=== 在js中应始终使用=== (5)空:null和undefined 大多数情况我们都使用null,undefined仅仅在判断函数是否传递情况使用 (6)数组:[]和new Array(1,2,3) 数组中可以放任意数据类型,数组的起始索引是0 (7)对象:对象是由键-值组成的无序集合,键只能是字符串,值可以是任意数据类型 (8)变量:var a=4;可以把任意数据类型赋值给变量,而且可以反复赋值,并且可以是不同的数值类型。这种变量不固定的语言是动态语言,相反的是静态语言(Java中)4.日志打印:
Console.log()5.strict:
由于不使用var修饰变量,变量作用范围就是指全局6.字符串:
' '和" ";(1)可使用转义字符\(2)` `可用来表示多行字符串 (3)模版字符串:模版字符串需要使用` `的形式,使用${name}拼接,避免了+使用的麻烦 (4)使用var s="hello" s.length可以获取字符串的长度 (5)还可以将字符串当成一个数组,获取某个角标位置的值,例如:var s="Hello" 打印s[2]得到l7.数组:
(1)js中的数组可以包含任意类型。给array.length=6,即给数组赋值一个新的长度,数组就会改变成新的长度了。对array元素的修改,会直接改在当前数组上,而对字符串的修改比如让其全部小写则是返回一个新的字符串(2)通过索引修改数组中某个元素的值,会直接修改数组中原来的值(3)如果通过索引赋值,索引超过了数组的大小,数组会被修改为新的大小长度,没有值的index的值会变为undefined,但是实际中我们应该注意不越界,避免麻烦(4)数组可通过调用indexOf()搜索制定元素的位置,若找不到返回-1(5)slice():用于截取数组,类似substring()(6)push():向数组末尾添加元素(7)pop():将数组中的最后一个元素删除(8)unshift():向数组头部添加元素 (9)shift():将数组的第一个元素删除掉 (10)sort():对数组进行排序 (11)reverse():对数组进行翻转,也就是掉个个(12)splice():splice(从哪个索引开始,删除几个元素,任意填写多个要添加的元素内容) (13)concat():把两个array连接起来,concat()可以接收任意个元素甚至是数组,最终返回一个新的数组而不会修改原来的数组 (14)join():可以把数组中的元素使用指定的字符串连接起来,类似var num=[1,2,3];num.join(‘-’);返回1-2-3 (15)多维数组:即数组中的某个元素也是个数组,就是多维数组。8.对象:
(1)对象是一个字符串,键值对,类似我们的json串;(2)如果对象的属性名不是一个有效的变量名,或者变量名包含特殊标点,应该使用''括起来,访问的时候也需要使用single[‘变量名’]这样的方式获取;(3)如果访问时候属性名不存在,会返回undefined;(4)js的对象是动态类型,可以灵活的添加、赋值、获取、删除 (5)可以通过in来判断某个对象是否有这个属性值,并返回boolean类型,例如'name' in xiaoming; in获取到的有可能不一定是这个对象本身的属性,而是通过继承获取到的父类属性 (6)hasOwnProperty():用于判断这个属性是不是这个对象本身拥有的,也是返回boolean类型9.条件判断:
if(){...}else if(){...}。注意:js把null、undefined、0、NaN和空字符串' '当作false,其余的值在if()中为true10.循环:
<for循环>:用法基本同Java。(1)可使用break跳出循环;(2)for..in类似Java中for each,输出的对象的属性;(3)要过滤掉对象继承来的属性,使用hasOwnProperty();(4)数组也被看为是对象,数组进行for..in输出得到是string类型的‘0’,'1','2',而不是number类型0,1,2;<while循环>和<do while循环>类似Java中使用方法11.Map和Set:
<Map>:(1)初始化var map = new Map();(2)添加新的值map.set('key',‘value’);(3)判断集合中是否存在key:map.has('key')(4)获取集合中的值:map.get('key'),若不存在返回undefinded;(5)删除集合中的值:map.delete('key');<Set>:Set中key不允许重复(1)初始化:var set=new Set();或var set=new Set([1,2,3]);(2)添加 set.add();(3)删除delete12. iterable:
Array,Map,Set都属于iterable。可用for..of遍历循环集合。for..of修复了for..in遗留的问题;更好的应使用forEach();forEach()的用法:a.在Array中:a.forEach(function (element, index, array) {};b.在Set中:s.forEach(function (element, sameElement, set) {};c.在Map中:m.forEach(function (value, key, map) {}13. 函数:
关键字为function。注意点:(1)同Java,遇到return方法结束;(2)定义方法的函数有2种,function abs(x){}和var abs=function(x){};;(3)函数体中的关键字arguments,arguments可以获取到当前函数的调用者传入的所有参数,类似一个Array,但不是一个Array,即使函数不定义任何参数,也可以拿到参数的值。arguments平时常被用来判断参数个数;(4)rest参数可被用来获取除定义的参数以外的数据,返回[]形式,若参数数量和传入数量匹配,rest得到是[]空数组;(5)js中默认的全局变量是winodw;(6)let替代var可以申明一个块级作用域的变量;(7)const用来定义常量;(8)同时进行多个元素赋值,可以使用解构赋值14. 方法:
方法的指向和调用这里,感觉不像Java那么简单明确。问题会比较多...其中注意点(1)this,指代当前对象(2)that,避免指向不明确(3)apply,接收两个参数,第一个参数就是需要绑定的this变量,第二个参数是Array,表示函数本身的参数,即getAge.apply(xiaoming,[])(4)call,和apply类似15.面向对象编程:
注意点:(1)类似于Java的extents使用是proto,举例子:xiaoming.propt=student,最好的办法是使用Object.create(Student);