JavaScript入门学习指南

article/2025/11/9 5:38:28

一、初始JavaScript

  1. JavaScript运行在客户端
  2. 脚本语言:不需要编译逐行进行解释学习
  3. 作用:
  • 表单验证
  • 网页特效
  • 服务端开发
  • 桌面程序
  • APP
  • 物联网-控制硬件
  • 游戏开发
  1. 浏览器执行JS:
    浏览器分成两个部分,渲染引擎和JS引擎
  • 渲染引擎:用于解析HTML和CSS,俗称内核,比如谷歌浏览器的blink,老版本的webkit
  • JS引擎:也称为JS解释器。用于读取网页之中的JS代码,对其处理后运行,比如Chrome浏览器的V8
  1. JS组成:

    • ECMAScript: JS基础语法和基础核心知识
    • DOM : 页面文档对象模型 元素隐藏,比如对页面元素进行移动、大小、添加删除等操作
    • BOM :浏览器对象模型 提供独立于内容的、可以和浏览器进行交互的对象结构,通过BOM可以操作浏览器窗口,比如弹出框、控制浏览器跳转、获取分辨率等。
  2. 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代码量比较大的时候

  3. JS注释:

    • 单行注释: //单行注释 ctrl+/
    • 多行注释 /* */

二 、JS输入输出语句

  1. alert(msg) 弹框警告
  2. console.log(ms) 浏览器控制台打印输出信息
  3. 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() 方法无法设置更强大的搜索值(正则表达式)。
      

(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 对象提供两个有用的属性:namemessage

20、变量提升hosting

Hoisting 是 JavaScript 将所有声明提升到当前作用域顶部的默认行为(提升到当前脚本或当前函数的顶部)。

letconst 声明的变量和常量不会被提升!

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、类中的语法必须遵循严格模式

不会进行变量提升,必须先申明类之后使用


http://chatgpt.dhexx.cn/article/tCIdAO0Q.shtml

相关文章

Caption Anything

Github&#xff08;已开源&#xff09;: https:// https://github.com/ttengwang/Caption-Anything Hugging Face Demo: https://huggingface.co/spaces/TencentARC/Caption-Anything &#xff0c;时长00:13 清明上河图demo 近日南方科技大学和腾讯ARC Lab开源了一款交互…

rethinking the inception architecture for computer vision

Google在GoogleNet中提出了inception概念之后&#xff0c;又提出了inception_2,inception_3&#xff0c;都在这篇论文中谈及。 文章地址为http://arxiv.org/pdf/1512.00567v3.pdf 四个通用的设计原则&#xff08;General Design Principles): 1. Avoid representational bot…

(Inceptionv3)Rethinking the Inception Architecture for Computer Vision

翻译论文汇总&#xff1a;https://github.com/SnailTyan/deep-learning-papers-translation Rethinking the Inception Architecture for Computer Vision 摘要 对许多任务而言&#xff0c;卷积网络是目前最新的计算机视觉解决方案的核心。从2014年开始&#xff0c;深度卷积网…

View Synthesis

一、SynSin: End-to-End Synthesis from a Single Image &#xff08;CVPR2020&#xff09; 该论文给出了一个视角图片生成的方法&#xff0c;其pipeline如下图&#xff1a; 首先将图片输入特征和深度网络得到特征map和深度图&#xff0c;接着通过相机参数变换为带特征的点云&…

Intention Oriented Image Captions with Guiding Objects

Intention Oriented Image Captions with Guiding Objects 原文地址 时间&#xff1a;2019 CVPR Intro image caption的过程缺少可控性&#xff0c;一张图片中可以包括很多个目标&#xff0c;但是一个描述只能包括其中一小部分 尽管我们能找到并分类出所有目标&#xff0c;…

Interact as You Intend: Intention-Driven HOI Detection

IEEE多媒体汇刊Author:Bingjie Xu, Junnan Li, Yongkang Wong摘要 为了与物体交互&#xff0c;人类会根据自己的意图引导注意力和移动身体。具体而言&#xff0c;提出的human intention-driven的HOI检测&#xff08;iHOI&#xff09;框架根据人体关节到物体实例的相关距离进行…

【Inception-v3】《Rethinking the Inception Architecture for Computer Vision》

CVPR-2016 在 CIFAR-10 上的小实验可以参考博客【Keras-Inception v3】CIFAR-10 文章目录 1 Background and Motivation2 Advantages / Contributions3 Innovations4 Method4.1 Factorizing Convolutions with Large Filter Size4.1.1 Factorization into smaller convolutions…

DynamicViT

又搬来了来自清华大学与UCLA的工作&#xff0c;提出了一种基于动态token稀疏化的高效视觉transformer&#xff0c;通过分层剪枝66%的输入tokens&#xff0c;可减少31%~37%的FLOPs&#xff0c;并将模型运行速度提高了40%以上&#xff0c;保证精度下降在0.5%以内&#xff0c;可应…

involution理解

最好的参考来自论文作者的知乎&#xff1a;CVPR 2021 | involution&#xff1a;超越convolution和self-attention的神经网络新算子 其他餐卡&#xff1a; https://zhuanlan.zhihu.com/p/400402288 https://zhuanlan.zhihu.com/p/356960359 https://blog.csdn.net/P_LarT/articl…

网络中的pvid与native vlan(本征vlan)区别以及详解

一&#xff1a;pvid与native vlan分别属于华为和思科交换里面的概念&#xff0c;虽然说法不同&#xff0c;但是本质都是缺省vlan 缺省vlan默认为1&#xff0c;各个端口都有一个缺省的vlan&#xff0c;该值支持修改。 2.作用概念&#xff0c;pvid存在于trunk中&#xff0c;且&…

VTP、PVID、ACCESS、trunk

一、VTP详解 VTP有server、client、transparent三种模式、VTP多用于在多vlan的网络环境中&#xff0c;在核心交换机或者根节点交换机中配置Server&#xff0c;在下层的交互机中配置client&#xff0c;VTP在服务模式下&#xff0c;可以创建、删除、修改VLAN&#xff0c;并且转发…

不同VLAN下实现网络互相通信(配置port trunk pvid vlan进行数据转发)

1. 两台交换机同一网段&#xff0c;不同VLAN实现网络互通&#xff0c;逻辑拓扑图如下&#xff1a; 需求&#xff1a;实现VLAN 10与VLAN20之间的PC网络互通 在LSW 12交换机进行如下命令行配置&#xff1a; <HuaWei>system-view #切换系统视图 [Huawei]sysname…

VLAN Tag,PVID

VLAN(Virtual Local Network&#xff0c;虚拟局域网)&#xff0c;对于VLAN的划分方法有很多种&#xff1a;基于端口划分&#xff0c;基于MAC地址划分&#xff0c;基于网络协议划分&#xff0c;基于IP地址划分&#xff0c;基于策略划分等等。但是就上述而言&#xff0c;对VLAN的…

trunk vlan pvid 学习实验整理 2

实验总结&#xff1a; trunk vlan vlan1 vid pvid 等关系。 实验场景二&#xff1a; 上述条件不变【实验场景一】&#xff0c;将PC1 加入vlan10 [SW1]interface Ethernet 0/0/1 [SW1-Ethernet0/0/1]port link-type access [SW1-Ethernet0/0/1]port default vlan 10 >>…

trunk vlan pvid 学习实验整理 1

实验总结&#xff1a; trunk vlan vlan1 vid pvid 等关系。 实验场景一&#xff1a; 将PC1/PC2/PC3,都置于同一网段&#xff1a;192.168.1.0/24 1.PC1 不加入任何vlan&#xff0c;PC2 不加入任何vlan&#xff0c;PC3加入vlan10 2.trunk链路允许vlan 10 20通过。 配置&#xf…

PVID(pvid vlan是什么意思)

26tpwinet如何设置端口pvid25口设置为trunk口&#xff1f; 首先你要确定你的电脑有没有USB转com口线&#xff0c;或者你的笔记本是否支持com口 如果你是win7系统确实没有超级终端那么你可以下一个SecureCRT&#xff0c;然后在设备管理器里面看一下自己是COM几口&#xff0c;波…

PVID和VID的理解

VID解释 VID&#xff08;VLAN ID&#xff09;是VLAN的标识&#xff0c;在交换机里面用来划分端口。比如一个交换机有8个端口&#xff0c;现在将port1&#xff0c;port2&#xff0c;port5三个端口的VID设置成1111&#xff0c;那么这三个端口就能接收vlantag1111的数据包。   …

2、PVID(本征VLAN)实验配置步骤

实验拓扑图&#xff1a; 实验配置思路&#xff1a; 将VLAN10配置为本征VLAN 本征VLAN通过Trunk接口时不打tag标记 实验摘要重点命令&#xff1a; [SW1]int g0/0/1 //进入接口 [SW1-GigabitEthernet0/0/1]port trunk pvid vlan 10 //将VLAN10设置为本征VLAN [SW1-Gig…

华为交换机PVID与VLAN ID及TAG 、UNTAG学习记录

一、PVID和VLAN ID 1、PVID是端口的属性&#xff0c;端口的标识&#xff0c;具有唯一性&#xff0c;交换机默认未配置Vlan的情况下&#xff0c;因为全局vlan1的原因&#xff0c;所有端口的PVID都是1。如下图&#xff1a; 2、交换机里面display port vlan命令可以查看未配置状态…

switch中的PVID、VID、untag、tag概念

以openwrt为例&#xff0c;下图是mt7621&#xff08;glinet mt1300&#xff09;中switch配置图 该switch一共有7个port&#xff0c;一个连接CPU&#xff0c;还有6个可供外部使用&#xff0c;上图只显示了6个port&#xff1b; 一个switch可以设置多个VLAN&#xff08;虚拟局域网…