JavaScript入门学习指南
一、初始JavaScript
- JavaScript运行在客户端
- 脚本语言:不需要编译逐行进行解释学习
- 作用:
- 表单验证
- 网页特效
- 服务端开发
- 桌面程序
- APP
- 物联网-控制硬件
- 游戏开发
- 浏览器执行JS:
浏览器分成两个部分,渲染引擎和JS引擎
- 渲染引擎:用于解析HTML和CSS,俗称内核,比如谷歌浏览器的blink,老版本的webkit
- JS引擎:也称为JS解释器。用于读取网页之中的JS代码,对其处理后运行,比如Chrome浏览器的V8
JS组成:
- ECMAScript: JS基础语法和基础核心知识
- DOM : 页面文档对象模型 元素隐藏,比如对页面元素进行移动、大小、添加删除等操作
- BOM :浏览器对象模型 提供独立于内容的、可以和浏览器进行交互的对象结构,通过BOM可以操作浏览器窗口,比如弹出框、控制浏览器跳转、获取分辨率等。
JS书写的位置
行内式
例子:
<input type="button" value="点吧" οnclick="alert('你在思考什么')">
特点:写在HTML标签的事件属性之中,时间属性一般是以on开头的,比如上面的onclick
注意单双引号的使用:在HTML之中推荐使用双引号,在JS之中一般推荐使用单引号。
可读性差,在HTML里面写了大量的JS代码,不方便阅读
引号也容易出错,引号多层嵌套的时候非常容易混淆
特殊情况下使用
内嵌式
例子:
<script>alert("欢迎欢迎") </script>
外部式
例子:
<script src="01JS.js"></script>
特点:利于HTML页面代码结构化,把大段的JS代码写在HTML之外,美观也方便复用
注意点:script标签的中间不可以写代码
适合于JS代码量比较大的时候
JS注释:
- 单行注释: //单行注释 ctrl+/
- 多行注释 /* */
二 、JS输入输出语句
- alert(msg) 弹框警告
- console.log(ms) 浏览器控制台打印输出信息
- prompt(info) 浏览器弹出输入框,用户可以输入
三、JS变量
1、变量
申明变量:var age; let age;
var申明变量可以在使用后申明,let申明变量必须先申明后使用
弱类型变量类型不固定,可以变
没有被赋值的变量:undefined
不申明也能用,像Python一样
规则:
- 不能用关键字
- 关键字:有特殊含义的字符,JavaScript 内置的一些英语词汇。例如:let、var、if、for等
- 只能用下划线、字母、数字、$组成,且数字不能开头
- 字母严格区分大小写,如Age 和age 是不同的变量
规范:
- 起名要有意义
- 遵守小驼峰命名法
- 第一个单词首字母小写,后面每个单词首字母大写。例:userName
2、数据类型
(1)简单数据类型
number数字型
isNaN(变量)可以用来判断一个变量是不是数字类型
string 字符串型
单字符串里面有引号的时候,外单内双或者外双内单
str.length 获取长度
字符串拼接:
字符串拼接任何类型都能这样拼接
${} 和 反引号(键盘上1旁边的那个)
我叫${name},今年${age}
(点了才能看见)
boolean布尔类型
true当1看,false 0
undefined未定义 申明未赋值
undefined+数字为NaN
undefined+str 为undefined+str内容
null空类型
null+str 为null+str内容
null+数字=数字
undefined和null的区别:undefined是没有赋值、null是赋值了但内容为空
没想好放啥时用这个定义变量,对象类型
(2)有关数据类型的操作
- typeof 查看变量类型
- 数据类型转换:
- 其他转为字符串:
- 变量名.toString()
- String(XX) 强制类型转换
- 加号拼接字符串(隐式转换)
- 其他转为数字型:
- parseInt(XX)
- parseFloat(XX)
- Number(XX)
- 利用算数运算 - * / eg: ‘12’-0 ‘123’-‘120’
- 其他转为boolean类型:
- Boolean(XX) 代表空、否定的值会被转换为false,如**‘ ’、0、NaN、null、undefined**(5个,其他全为TRUE)
- 其他转为字符串:
(3)object类型
3、算数运算符
- 基本运算符: + - * / %
- 赋值运算符 : = += -= *= /= %=
- 前置运算符: ++X --X 先变化后返回不一样的值
- 后置预算符:X++ X-- 先返回原值后变化
- 比较运算符:< > <= >= == != === !==
注意点:console.log(18==‘18’) 的值是TRUE,因为 == 默认类型转换,会把字符串转换为数字型。但 === 不会。
- 逻辑运算符: && || ! ||优先级高于&&
4、分支语句
(1)if
if(条件){
………………
}
(2)三元表达式
条件?表达式1:表达式2
(3)switch语句
switch(表达式){
case 值1:语句1;break;
case 值2:语句2;break;
…………
default:最后的语句;
}
(4)for循环
continue break
(5)while循环
(6)do……while循环
5、数组
(1)创建数组:
- 创建空数组:var arr = new Array();
- 用[]创建:var arr = [1,2,3,‘4’,true];
- var arr = new Array(2) 长度为2空数组
- var arr = new Array(2,3)等价于[2,3]
(2)数组长度:arr.length
数组过滤器:arr.filter((item)=>{
if(XXX) return true;
XXX;
return false;
})
过滤剩下使得filter里面的函数为true的item。
四、函数
1、定义
(1)第一种:普通函数定义,这种方式较多
function 函数名(形式参数列表){
函数体;
}
例如:
function sum(a, b){
return a + b;
}
(2)第二种:如果是把函数的声明当做类进行定义这种方式较多
函数名 = function(形式参数列表){
函数体;
}
例如:
sum = function(a, b){
return a + b;
}
2、可变参数arguments
数组类型
只有函数才有,所有函数内置好的
3、作用域
- 全局作用域-----全局变量
- 局部作用域-----局部变量
五、预解析
1、变量的申明和函数的定义都会被预解析,所以放在后面 声明\定义 都可以
2、 注意点:如果执行下面的代码
console.log(num);
var num = 10;
会打印undefined,因为只是将申明预解析,赋值没有预解析。它相当有执行下面的代码:
var num;
console.log(num);
num = 10;
3、连写
var a=b=c=9;
相当于
var a=9;b=9;c=9;
六、对象
(一)创建对象
1、利用字面量
var obj = {};
var obj1 = {name:"lilian",age:18,sex:"man",sayHi:function(){…………}}2、用new Object()
var obj2 = new Object();//创建了一个空对象
ojb2.name = 'lilian';
obj2.age = 116;
obj2.sayHi = function(){………………
}3、构造函数创建对象
前面两种一次只能创建一个对象
想要创建相同属性不同属性值的对象麻烦
构造函数封装相同的属性和代码(1)创建
function 构造函数名(){this.属性1 = 属性;this.方法 = fucntion(){}
}
注意点:构造函数函数名首字母大写!!规范!
对象属性必须要用添加this!!!
(2)使用
var 对象名 = new 构造函数名();
(二)使用对象
调用对象属性: obj1.name 或者 obj1[‘name’]
调用对象的方法: obj1.sayHi();
(三)构造函数和对象的区别
(四)new在构造函数时的作用
1、new构造函数在内存中创建一个空的对象
2、this指向创建出来的对象
3、置信构造函数里面的代码,给空对象添加属性和方法
4、返回这个对象(所以构造函数里面不需要return)
(五)遍历对象属性(数组、列表同样适用)
1、for(var 变量 in 对象){
console.log(变量);//得到属性名
console.log(对象[变量]); //得到属性值
}
2、for(var 变量 of 对象)
七、内置对象
1、JS中对象的分类:
- 自定义对象
- 内置对象
- 浏览器对象
前两种属于ECMAScript,是JS基础对象;第三个是JS独有的浏览器对象
2、查文档
(1)MDN
(一)Math对象
不是构造函数,不用new,直接用
(二)日期对象Date
需要创建的
var date = new Date();
1、创建
没有参数:创建了当前的时间的date
有参数:
数字型:var date2 = new Date(2022,9,14,8,45,23);
log出的时间是10月的
字符串型:var date3 = new Date(‘2022-9-14 8:8’); 最常用!!!!
2、格式化日期
3、获取毫秒数
- valueOf()
- getTime()
- +new Date() 常用
- 没参数,返回当前的时间戳
- 有date参数,返回date参数时间戳
- Date.now() H5新增
4、倒计时—时间戳变成"天时分秒":
var now = +new Date();
var end = +new Date(time);
var times = end - now;
var times = times/1000;
var d = parseInt (times/60/60/24);
var h = parseInt(times/60/60%24);
var m = parseInt(times/60%60);
var s = parseInt(times%60);
return d+'天'+h+'时'+m+'分'+s+'秒';
(三)数组对象Array
1、创建
2、判断是否是数组
方法1:
var flag = arr instanceof Array
方法2:
Array.isArray(arr);
3、操作
// 1、push在数组最后添加
arr.push(2);
arr.push(4,'zm');//push两个进去。。
//push有返回值,是数组长度//2、unshift在数组的开口添加一个或者多个数组元素
arr.unshift('red','green');//参数顺序+arr//3、删除pop
arr.pop();//返回值为删除掉的那个元素// 4、数组翻转、排序
arr.sort()
arr.reverse()//去重
function unique(arr){var newArr = [];for(var i = 0;i<arr.length;i++){if(newArr.indexOf(arr[i])===-1){newArr.push(arr[i]);}}return newArr;
}// 6、数组转换为字符串
// (1)
arr.toString();//逗号连接
// (2)
arr.join();//没参数默认逗号连接
arr.join('-');//用封号;连接
八、基本包装类型
1、改变字符串会新开辟内存
2、字符串创建的 var str=‘123’; 和 var arr=new String(‘123’); 一样
3、返回字符串中字符的位置:str.indexOf(‘2’)
str.indexOf(‘2’,4);从索引号4开始查找
4、根据位置返回字符
5、str.charCodeAt(index) 返回str相应索引号的字符的ASCII码值
可以用于判断用户按下了哪一个键
6、字符串操作
替换字符串 str.replace(‘a’,‘b’) (只会替换第一个字符)
字符变数组 str.split(‘,’)
九、简单数据类型和复杂数据类型对比
1、内存分配
简单数据类型:
存在栈里面,直接开辟一个空间存放
复杂数据类型:
存在堆里面,首先在栈里面放地址,真正的数据放在地址对应的堆里的内存
2、参数传递
简单数据类型:
形参和实参指向不同地址
复杂数据类型:
形参和实参变量名指向不同地址的栈内地址,但两个站内地址都存放同个堆内地址,因此形参和实参实际上指向的是同个对象。
所以函数操作过后的对象会跟着改变。
待解决问题
1、this指向
2、在ES6之前没有局部作用域怎么说?
var a=10;
if(true){var a=9;return 9}
console.log(a) //结果为9
3、闭包
4、事件冒泡事件捕获
5、this指向
this
关键词指的是它所属的对象
它拥有不同的值,具体取决于它的使用位置:
- 在方法中,
this
指的是所有者对象。 - 单独的情况下,
this
指的是全局对象。浏览器窗口中全局对象是window - 在函数中,函数的拥有者默认绑定
this
。 - 在函数中,严格模式下,
this
是 undefined。 - 在事件中,
this
指的是接收事件的HTML元素。
在构造器函数中,this
是没有值的。它是新对象的替代物。 当一个新对象被创建时,this 的值会成为这个新对象。
(1)在函数中
this指向函数的拥有者
6、new关键字
请不要把字符串、数值和布尔值声明为对象!
如果通过关键词 “new” 来声明 JavaScript 变量,则该变量会被创建为对象:
var x = new String(); // 把 x 声明为 String 对象
var y = new Number(); // 把 y 声明为 Number 对象
var z = new Boolean(); // 把 z 声明为 Boolean 对象
var cars = new Array()
var h = new Boolean()
请避免字符串、数值或逻辑对象。他们会增加代码的复杂性并降低执行速度。
7、字符串方法
(1)srt.length
(2)检索(3个方法)
indexOf()
indexOf()
方法返回字符串中指定文本首次出现的索引(位置)lastIndexOf()
lastIndexOf()
方法返回指定文本在字符串中最后一次出现的索引
上面两个都能接受第二个参数作为检索起始位置。
search()
方法搜索特定值的字符串,并返回匹配的位置:两种方法,`indexOf()` 与 `search()`,是*相等的*。这两种方法是不相等的。区别在于:- search() 方法无法设置第二个开始位置参数。 - indexOf() 方法无法设置更强大的搜索值(正则表达式)。
match()
match() 方法根据正则表达式在字符串中搜索匹配项,并将匹配项作为 Array 对象返回。
includes(substr) 包含子串返回true
String.startsWith()
如果字符串以指定值开头,则
startsWith()
方法返回true
,否则返回false
:String.endsWith()
(3)提取部分字符串(3个方法)
slice(start, end)
省略end,将裁到最后
注意可以接受负数索引值
substring(start, end)
类似slice(),不能接受负数索引值
substr(start, length)
(4)替换字符串内容
replace()
方法用另一个值替换在字符串中指定的值:
replace()
方法不会改变调用它的字符串。它返回的是新字符串。
默认地,replace()
只替换首个匹配:
var n = str.replace(/MICROSOFT/i, "W3School");
用 / /i 设置大小写不敏感的替换。
(5)转换大小写
toUpperCase()
toLowerCase()
(6)concat()
(7)trim()
(8)提取字符串字符
- charAt(pos) pos指定索引值
- charCodeAt(pos)
(9)转换为数组 split()
8、数字运算中JS将尝试将字符串转为字符
9、数字类型中
(1)NaN
用于指示某个数不合法
数字和NaN进行数值运算时结果都是NaN
但 NaN+‘5’ 这种值为 ‘NaN5’
(2)Infinity
除以 0(零)也会生成 Infinity
:
(3)十六进制0x
0x
进制转换:
num.toString(参数) 参数可以是 2 8 16 10
10、数字方法
(1)toString() 返回字符串
(2)toExponential() 方法 小数四舍五入!!!!
toExponential()
返回字符串值,它包含已被四舍五入并使用指数计数法的数字。
参数定义小数点后的字符数:
var x = 9.656;
x.toExponential(2); // 返回 9.66e+0
x.toExponential(4); // 返回 9.6560e+0
x.toExponential(6); // 返回 9.656000e+0
没有参数不对数字舍入
(3)toFixed() 方法 保留几位小数
toFixed()
返回字符串值,它包含了指定位数小数的数字:
(4)toPrecision() 方法
toPrecision()
返回字符串值,它包含了指定长度的数字:
(5)valueOf() 方法 好像没啥用
valueOf()
以数值返回数值:
var x = 123;
x.valueOf(); // 从变量 x 返回 123
(123).valueOf(); // 从文本 123 返回 123
(100 + 23).valueOf(); // 从表达式 100 + 23 返回 123
(6)变量变数值
这三种 JavaScript 方法可用于将变量转换为数字:
Number() 方法
parseInt() 方法
parseInt("10"); // 返回 10 parseInt("10.33"); // 返回 10 parseInt("10 20 30"); // 返回 10 parseInt("10 years"); // 返回 10 parseInt("years 10"); // 返回 NaN
parseFloat() 方法
这些方法并非数字方法,而是全局 JavaScript 方法。
如果无法转换数字,则返回 NaN
。
(7)数值属性
属性 | 描述 |
---|---|
MAX_VALUE | 返回 JavaScript 中可能的最大数。 |
MIN_VALUE | 返回 JavaScript 中可能的最小数。 |
NEGATIVE_INFINITY | 表示负的无穷大(溢出返回)。 |
NaN | 表示非数字值(“Not-a-Number”)。 |
POSITIVE_INFINITY | 表示无穷大(溢出返回)。 |
11、数组方法
(1)length()
(2)遍历数组
简单的方法是用for循环
- Array.foreach() 接受的参数
arr.foreach((value,index)=>{
})
(3)添加数组元素
向数组最后添加元素:
- push()
- arr[lenth]=‘XXX’
(4)Array.isArray(XXXX) 可用于判断XXXX是不是数组,返回true或者false
(5)数组变字符串
toString() 方法 把数组变成字符串,逗号分隔
join( )
没有参数时默认逗号连接,有参数时用参数连接。
(6)pop() push() 在数组最后元素进行处理
(7)shift() unshift() 对数组头部进行处理
push unshift 方法的返回值为新数组长度。
(8)splice() 拼接数组
可以向数组添加新项
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2, 0, "Lemon", "Kiwi");
第一个参数(2)定义了应添加新元素的位置(拼接)。
第二个参数(0)定义应删除多少元素。
其余参数(“Lemon”,“Kiwi”)定义要添加的新元素。
splice()
方法返回一个包含已删除项的数组:
注意:可以使用splice删除元素
比如:arr.splice(0,1) 就是删除第一个元素,而且不会留下空洞undefined
(9)合并(连接)数组 concat()
使用方法: a.concat(b[,c,d…])
concat不会更改现有数组,它返回一个新数组
(10)slice() 剪裁数组 使用方法和字符串的slice()方法差不多
(11)数组排序
sort() 以字母顺序进行排序 改变原数组:
reverse() 翻转数组 与sort()配合可以实现降序排序
sort()+比值函数 实现按照数值大小排序:
给sort传一个比值函数作为参数。
function(a, b){return a-b} //从小到大
function(a, b){return b-a} //从大到小
比值函数应该返回一个负数、0、正数
返回负值时 JS 将a 排的更低
(12)数组找最大、最小值
查找最高、最低的数组值 JS不提供找最大最小,通过排序可以获取最大值最小值。
通过调用Math对象的方法
function myArrayMax(arr) {return Math.max.apply(null, arr);
}function myArrayMin(arr) {return Math.min.apply(null, arr);
}
最快的方法是遍历查找
(13)数组迭代 !!!!重要!!!!!!9个
1、forEach(回调函数) 作用相当于for循环
为每个数组元素调用一次函数(回调函数)。
**注释:**该回调函数接受 3 个参数:
- 项目值
- 项目索引
- 数组本身
2、Array.map() 返回值为新数组
map()
方法通过对每个数组元素执行函数来创建新数组。
map()
方法不会对没有值的数组元素执行函数。
map()
方法不会更改原始数组。
3、Array.filter() 返回值为使得回调函数return true的元素的集合
filter()
方法创建一个包含通过测试的数组元素的新数组。
4、Array.reduce(回调函数[,初值值])
reduce()
方法在每个数组元素上运行函数,以生成(减少它)单个值。
reduce()
方法在数组中从左到右工作。另请参阅 reduceRight()。
reduce()
方法不会减少原始数组。
请注意此回调函数接受 4 个参数:
- 总数(初始值/先前返回的值)
- 项目值
- 项目索引
- 数组本身
5、Array.reduceRight()
reduceRight()
方法在每个数组元素上运行函数,以生成(减少它)单个值。
reduceRight()
方法在数组中从右到左工作。另请参阅 reduce()。
reduceRight()
方法不会减少原始数组。
6、Array.every() 每个元素在回调函数里都返回true才为true
every()
方法检查所有数组值是否通过测试。
7、Array.some() 至少一个元素在回调里返回true就true
some()
方法检查某些数组值是否通过了测试。
8、Array.find() 找第一个符合条件的元素
find()
方法返回通过测试函数的第一个数组元素的值。
indexOf()
方法在数组中搜索元素值并返回其位置。
Array.lastIndexOf()
与 Array.indexOf()
类似,但是从数组结尾开始搜索。
9、Array.findIndex() 找第一个符合条件的元素的索引值
findIndex()
方法返回通过测试函数的第一个数组元素的索引。
总结:
查找有:filter、find、findIndex,
判断整体是否符合有every、some,
通用遍历有forEach,
累加操作有reduce,
生成新数组有map
12、const不定义数组,定义的是常量引用(地址)
13、日期Date对象
(1)创建Date对象
有 4 种方法创建新的日期对象:
new Date() 创建当前时间
new Date(year, month, day, hours, minutes, seconds, milliseconds)
注意JS中月份从0-11
new Date(milliseconds)
new Date(date string)
(2)日期输入格式
类型 | 实例 |
---|---|
ISO 日期 | “2018-02-19” (国际标准) |
短日期 | “02/19/2018” 或者 “2018/02/19” |
长日期 | “Feb 19 2018” 或者 “19 Feb 2019” |
完整日期 | “Monday February 25 2015” |
(3)日期获取
获取方法用于获取日期的某个部分(来自日期对象的信息)。下面是最常用的方法(以字母顺序排序):
方法 | 描述 |
---|---|
getDate() | 以数值返回天(1-31) |
getDay() | 以数值获取周名(0-6) |
getFullYear() | 获取四位的年(yyyy) |
getHours() | 获取小时(0-23) |
getMilliseconds() | 获取毫秒(0-999) |
getMinutes() | 获取分(0-59) |
getMonth() | 获取月(0-11) |
getSeconds() | 获取秒(0-59) |
getTime() | 获取时间(从 1970 年 1 月 1 日至今) |
(4)日期设置
方法 | 描述 |
---|---|
setDate() | 以数值(1-31)设置日 |
setFullYear() | 设置年(可选月和日) |
setHours() | 设置小时(0-23) |
setMilliseconds() | 设置毫秒(0-999) |
setMinutes() | 设置分(0-59) |
setMonth() | 设置月(0-11) |
setSeconds() | 设置秒(0-59) |
setTime() | 设置时间(从 1970 年 1 月 1 日至今的毫秒数) |
(5)比较日期
日期可以很容易地进行比较。a>b这样就行
14、Math类
(1)Math.round() 返回四舍五入接近的整数
Math.round(x)
的返回值是 x 四舍五入为最接近的整数:
Math.ceil()
Math.ceil(x)
的返回值是 x 上舍入最接近的整数:
Math.floor()
Math.floor(x)
的返回值是 x 下舍入最接近的整数:
(2)Math.pow()
Math.pow(x, y)
的返回值是 x 的 y 次幂
(3)Math.sqrt()
Math.sqrt(x)
返回 x 的平方根:
(4)Math.abs()
Math.abs(x)
返回 x 的绝对(正)值:
Math.sin()
Math.sin(x)
返回角 x(以弧度计)的正弦(介于 -1 与 1 之间的值)
Math.cos()
Math.cos(x)
返回角 x(以弧度计)的余弦(介于 -1 与 1 之间的值)。
Math.min() 和 Math.max()
Math.min()
和 Math.max()
可用于查找参数列表中的最低或最高值:
Math.random()
Math.random()
返回介于 0(包括) 与 1(不包括) 之间的随机数:
Math 属性(常量)
JavaScript 提供了可由 Math 对象访问的 8 个数学常量:
Math.E // 返回欧拉指数(Euler's number)
Math.PI // 返回圆周率(PI)
Math.SQRT2 // 返回 2 的平方根
Math.SQRT1_2 // 返回 1/2 的平方根
Math.LN2 // 返回 2 的自然对数
Math.LN10 // 返回 10 的自然对数
Math.LOG2E // 返回以 2 为底的 e 的对数(约等于 1.414)
Math.LOG10E // 返回以 10 为底的 e 的对数(约等于 0.434)
15、for in
遍历对象属性
for (x in person) {text += person[x];
}
遍历数组
const numbers = [45, 4, 9, 16, 25];let txt = "";
for (let x in numbers) {txt += numbers[x];
}
当顺序很重要时,最好使用 for 循环、for of 循环或 Array.forEach()。
16、For Of 循环
JavaScript for of
语句循环遍历可迭代对象的值。
Number()
转换数值,String()
转换字符串,Boolean()
转换布尔值。
17、一元 + 运算符
一元的 +
运算符可用于把变量转换为数字:
实例
var y = "5"; // y 是字符串
var x = + y; // x 是数字
18、捕获错误
try
语句使您能够测试代码块中的错误。
catch
语句允许您处理错误。
throw
语句允许您创建自定义错误。
finally
使您能够执行代码,在 try 和 catch 之后,无论结果如何。
19、Error 对象
JavaScript 拥有当错误发生时提供错误信息的内置 error 对象。
error 对象提供两个有用的属性:name
和 message
。
20、变量提升hosting
Hoisting 是 JavaScript 将所有声明提升到当前作用域顶部的默认行为(提升到当前脚本或当前函数的顶部)。
用 let
或 const
声明的变量和常量不会被提升!
21、JS严格模式
"use strict";
定义 JavaScript 代码应该以“严格模式”执行。
"use strict"
指令只能在脚本或函数的开头被识别。
严格模式不允许:
- 不声明就使用变量
- 删除变量 delete x; 这种
- 重复参数名
- 八进制数值
- 转义字符
- 。。。
22、JSON
JSON.parse() 字符串=》JSON
JSON.stringify()
23、在switch会使用严格比较 ===
24、原型
所有 JavaScript 对象都从原型继承属性和方法。
日期对象继承自 Date.prototype。数组对象继承自 Array.prototype。Person 对象继承自 Person.prototype。
Object.prototype 位于原型继承链的顶端:
日期对象、数组对象和 Person 对象都继承自 Object.prototype。
(1)使用 prototype
属性
JavaScript prototype 属性允许您为对象构造器添加新属性或者方法:
function Person(first, last, age, eyecolor) {this.firstName = first;this.lastName = last;this.age = age;this.eyeColor = eyecolor;
}
Person.prototype.nationality = "English";
Person.prototype.name = function() {return this.firstName + " " + this.lastName;
};
25、Map结构
Map与object比较:
共同点:键值对动态集合,支持增加和删除键值对。
不同点:
- 构造方式不同
26、Set结构
27、闭包
var add = (function () {var counter = 0;return function () {return counter += 1;}
})();add();
add();
add();// 计数器目前是 3
28、类不是对象,是对象的模板
29、类中的语法必须遵循严格模式
不会进行变量提升,必须先申明类之后使用
JavaScript入门学习指南相关推荐
- 给“非IT背景的新手BA”的技术入门学习指南
图:史江鸿 <读赏春天> 01 BA为什么要了解技术? 去年3月份,ThoughtWorks 迎来了2021年的第一批应届生入职潮,其中有30多位同学担任BA角色.他们不是拥有海外留学背景 ...
- javascript立体学习指南
javascript立体学习指南 第一章:首先了解javascript 首先,什么是javascript? JavaStrip出生于1995年,是一种文本脚本语言,成都装修公司是一种动态的.弱类型的. ...
- Python入门学习指南--内附学习框架
Python入门学习指南 原文链接:https://blog.csdn.net/weixin_44558127/article/details/86527360 最近开始整理python的资料,博主建 ...
- python从零开始到精通_「Python 入门学习指南」0基础小白助你从入门到精通!
Python比较简单,非常适合初学者入门,内置了各种库,还有丰富的大约13万第三方库,掌握了语法和编程思维后,可以直接使用这些库做出自己的产品.这篇 Python 入门学习指南,针对没有任何编程经验. ...
- java新手入门学习指南
java新手入门学习指南由 android杂谈网原创. 0.准备 1.JDK安装和环境变量配置 2. 安卓开发环境搭建 3.熟悉eclipse开发环境,并使用eclipse创建第一个java应用程序 ...
- php入门教程ppt,PHP与MySQL入门学习指南.ppt
<PHP与MySQL入门学习指南.ppt>由会员分享,可在线阅读,更多相关<PHP与MySQL入门学习指南.ppt(18页珍藏版)>请在人人文库网上搜索. 1.PHP5與MyS ...
- 【Python数据分析】基础入门学习指南到数据分析实战
Python是一种流行的通用编程语言,在科学领域被广泛使用.你很容易在Python代码中调用以前的C.Fortran或者R代码. Python是面向对象语言,比C和Fortran更 加高级.使用Pyt ...
- Javascript入门学习笔记
JS入门学习笔记目录 1.JS简介 2.组成部分 3.特点 4.作用 5.JS三种添加方式 6.变量 7.数据类型 8.检测数据类型 9.逗号运算符 10.算术运算符 11.关系运算符 12.逻辑运算 ...
- java -jar 默认参数_JAVA入门学习指南,建议收藏
如果你不懂Java 并且想认真学习接触了解一下Java的语法,建议把这篇文章收藏了,多看几遍,应该可以初步掌握Java 大部分基础的语法 . 让我们出发吧!ps:本文有点长,耐心阅读 . 〇,编程环境 ...
最新文章
- [数分提高]2014-2015-2第4教学周第1次课
- 转: 学ppt的网址与素材
- 10 个小技巧:快速用 Python 进行数据分析
- 网络与IO知识扫盲(七):仿照Netty工作架构图,手写多路复用模型
- LeetCode 321. 拼接最大数(单调栈)*
- 在Windows 2003 IIS 6.0中配置PHP的运行环境(图)
- 机器/深度学习常见面试问题
- 八皇后问题的非递归解法
- 构建Electron的常见问题(Mac)
- caffe学习日记--lesson6: 常用的caffemodel下载链接
- ubuntu20.04 下查看(改变)本地端口开放情况,开启和关闭防火墙
- php处理ubb代码,UBB代码详解
- windows 定时杀掉进程
- 什么是MySQL索引?
- DxO发布Nik Collection 5插件,胶片颗粒更逼真
- SQL SELECT完整语法
- 微信小程序--行星轨迹
- Unity 场景切换间的内存清理
- EditPlus中文版-具有 FTP、FTPS 和 sftp 功能的文本编辑器
- 因果推理(三):关联和因果在因果图中的流动