《javascript高级程序设计》javascript
什么是javascript?java
一种直译式脚本语言,是一种动态类型、弱类型、面向对象、基于原型的语言,内置支持类型。它的解释器被称为javascript引擎,为浏览器的一部分,普遍用于客户端的脚本语言。c++
Javascript的数据类型有哪些?程序员
Undefined;null;boolean;string;number;symbol;objectes6
Undefined:未定义。正则表达式
Null:定义了可是为空,即定义了可是尚未赋值。数组
Boolean:true/false。浏览器
String:字符串,有最大长度。异步
Number:数字,有几种特殊状况:NaN;infinity(无穷大);-infintty(负无穷大)函数
什么是对象?
对象具备惟一性,惟一标识是内存地址,在js中,对象全部的属性和方法都概括为“属性”(js中对象的行为和状态都能用属性来抽象),而且和c++和java不一样,js中对象的属性(包括方法)能够在运行中更改。js语言标准已经说明,js是一门面向对象的语言,我想标准中能这样说,正是由于js的高度动态性的对象系统(js的对象系统具备极高的灵活性)。js是基于原型的面向对象的脚本语言,es6中引入了class定义类的方式,new和function搭配的怪异方式终于能够退休了,任何场景winter都推荐使用class类的写法。类的写法实际上也是由原型运行时承载的,逻辑上javascript认为每一个类是由共同原型的一组对象,类中定义的方法和属性则会被写在原型对象之上。
面对对象和基于对象有什么区别?
面向对象的三大特色(封装,继承,多态)缺一不可。一般“基于对象”是使用对象,可是没法利用现有的对象模板产生新的对象类型,继而产生新的对象,也就是说“基于对象”没有继承的特色。而“多态”表示为父类类型的子类对象实例,没有了继承的概念也就无从谈论“多态”。如今的不少流行技术都是基于对象的,它们使用一些封装好的对象,调用对象的方法,设置对象的属性。可是它们没法让程序员派生新对象类型。他们只能使用现有对象的方法和属性。因此当你判断一个新的技术是不是面向对象的时候,一般可使用后两个特性来加以判断。“面向对象”和“基于对象”都实现了“封装”的概念,可是面向对象实现了“继承和多态”,而“基于对象”没有实现这些,的确很饶口。简单地说:基于对象不能继承,更谈不上多态.
有哪些方法能够获取原型对象?
1:从构造函数获取原型对象
构造函数.prototype
2:从对象实例获取父级原型对象
a:对象实例._proto_ (有兼容性问题,不建议使用)
b:object.getprototypeof(对象实例)
javascript中的对象有哪些?
宿主对象(取决于js的运行环境,好比运行在浏览器则由windos对象)
内置对象(内置对象又分为:固有对象;原生对象;普通对象)
宏观任务和微观任务有什么区别?
宿主发生的任务叫宏观任务,js引擎发起的任务叫微观任务,微任务优先于宏任务。咱们首先应该造成一个感性的认知:一个javascript引擎会常驻于内存中,它等待着咱们(宿主)把js代码或者函数传递给它执行。
肯定异步代码执行顺序,咱们这样总结:
1:首先咱们分析有多少个宏任务;
2:在每一个宏任务中,分析有多少个微任务;
3:根据调用次序,肯定宏任务中的微任务执行次序;
4:根据宏任务的出发规则和调用次序,肯定宏任务的执行次序;
5:肯定整个顺序。
哪些语句会由于let而产生做用域?
var声明变量有不少瑕疵,后来引入了let。为了实现let,js在运行时引入了块级做用域。也就是,在let出现以前,js的if for等语句皆不会产生做用域。简单统计,如下语句会产生let的使用的做用域:for;if;switch;try/catch/finally。题外话:当即执行函数,能够构造一个新的域,从而控制var的范围(当即执行函数前应该加分号,或者加void)
js代码到底要不要加分号?
关于分号,大部分时候不用加分号,少部分要注意:
1:以括号开头的语句,如当即执行函数
2:以数组开头的语句,可能被解析成下标
3:以正则表达式开头的语句,斜杠可能被解析成除号
4:以template开头的语句