JS基础阶段问题

JS基础阶段

1.JS四种输出方式:

  • 使用 window.alert() 写入警告框

  • 使用 document.write() 写入 HTML 输出

  • 使用 innerHTML 写入 HTML 元素

  • 使用 console.log() 写入浏览器控制台

2.关键字, 标识符,保留字有什么区别?

关键字:有特殊意义的;保留字;未来可能会被征用的名字;标识符指的是变量、函数、属性的名字,或者函数的参数。

3.基本数据类型和引用数据类型有哪些?

基本数据类型:String,、Number、Boolean、Undefined、Null、Symbol

引用数据类型 :Object 数组 函数

4.JavaScript 构成

  • 核心(ECMAScript):语言核心部分。

  • 文档对象模型(Document Object Model,DOM):网页文档操作标准。

  • 浏览器对象模型(BOM):客户端和浏览器窗口操作基础。

5.NAN和ISNAN的区别

isNaN方法检测一个值是不是非纯数字 , 如果非纯数字就返回true 如果是纯数字就返回false;

NaN(不是一个数字),是一个特殊的数值,特点:无论和谁比较都是fasle 无论和谁计算都是NaN

6.判断数据类型有哪几种方式?

typeof(判断基本数据类型,不能识别NUll); instanceof识别引用数据类型;还一个construact null、undefined没有construstor方法,因此constructor不能判断undefined和null。(通过构造器的名字判断构造器) toString是此方法可以相对较全的判断js的数据类型。(用的次数比较少,执行的时间过长,性能会更差。

7.JavaScript数据类型转换有哪几种?

Number()方法 将其他类型转换成number类型 Number方法会返回一个转换后的值;

parseInt是一个全局方法,它可以把值转换为整数

parseFloat()也是一个全局方法,它可以把值转换成浮点数,即它能够识别第一个出现的小数点,而第二个小数点视为非法。解析过程和parseInt相同。

8.this的6个指向是什么?

(1) 在script标签中 this代表的是window对象

(2) 在普通函数中 this代表的是window对象

(3)在构造函数中this代表的是 创建出来的实例化对象

(4)在方法内部的this 代表的是方法的调用者

(5) 在事件回调函数中 this代表的是事件源

(6) 在call和apply方法中 this代表的是第一个参数

9.call和apply的区别?

call传递是一个又一个的值,改变了this指向; apply传递是一个数组。

10.创建对象的方法有哪些?

new,构造函数,工厂类,构造方法,字面量

11.构造器的定义和特点

(1)严格意义上来说 构造器的名字 首字母必须大写

(2)构造器是不需要写返回值的

(3)一个函数是不是构造器 并不是取决于函数名字的首字母是否大写 而是取决于是否在前面加new。

特点:

  • 如果构造函数中 写了return返回的是基本数据类型 那么还是返回的是对象

  • 如果构造函数中 写了return返回的是引用数据类型 那么返回的是引用数据类型

12.属性的增删改查

增(点语法,中括号语法),删:delete 变量名["属性值"];改:变量名.属性值;详细见其他后面发布的文章;和改差不多。

13数组内置函数增加两种方式?

push():将一个或多个元素添加到数组的末尾,并返回该数组的新长度。

unshift: 向数组头部添加一个或多个元素,并返回数组的新长度。

14.全局作用域(Global Scope)和局部作用域(Local Scope)

  • 在全局作用域定义的变量或函数我们称之为是全局变量或全局函数,在任何地方都可以被访问。

  • 在函数内部就是局部(函数)作用域

每调用一次函数就会创建一个新的函数作用域,它们之间是相互独立的。

函数内部声明的变量我们称之为局部变量,它只能在所定义的函数内部可访问,在全局中是无法访问的。

15.作用域链概念 作用域和作用域链的区别?

作用域链:即各个函数作用域链互相嵌套形成的一个链式结构。

  • 作用域:描述的是变量作用的范围。

  • 作用域链:决定了变量的查找规则(就近原则,由内往外层找 )

  • 作用域链的就近原则:访问变量,会优先在自身的作用域查找,若没有找到,会继续往上一级作用域中去找,直到找到全局作用域,若找到就使用,找不到就报错(引用错误,这个变量没有定义)

16.数组常见内置函数

  • 有影响的:push、pop、unshift、shift、reverse,splice, sort(排序)

  • 没有影响的:concat、includes、join、indexOf,slice

  • ES6新数组:

17.两个时间器函数

setTimeout 延时器 (执行一次)

setInterval 定时器 (执行多次)

dom阶段

1.获取dom的方法

  • document.getElementById <!--通过id属性获取dom对象-->

  • document.getElementsByTagName <!--通过标签名字获取dom对象-->

  • document.getElementsByClassName <!--通过class属性获取dom对象-->

  • document.getElementsByName <!--通过name属性获取dom对象-->

  • document.querySelector <!--通过选择器获取dom对象-->

  • document.querySelectorAll <!--通过选择器获取dom对象-->

2.修改dom的四个方法

通过原生属性-普通属性

特殊属性1-,当属性名字和属性值一致的时候 我们一般使用的是true和false

可以使用className来修改class的属性值

自定义的属性可以通过setAttribute来设置

3.DOM修改标签中的内容的区别?

从获取来说: innerHTML获取的是标签中的html文本; innerText获取的是标签中的纯文本 。

从设置来说: innerHTML中的文本标签会生效; innerText中的文本标签不会生效

3.dom事件的三要素

  • 事件源

  • onclick:事件类型

  • function(){}:事件的回调函数 就是这个事件干了什么

4.鼠标事件方法有哪些
  • onclick <!--点击-->

  • onmousemove <!--鼠标移入-->

  • onmouseover/onmouseout <!--鼠标移入移出-->

  • onmounseenter/onmouseleave <!--鼠标移入移出-->

  • onmousedown/onmouseup <!--鼠标点击和抬起-->

5.键盘事件4个
  • onkeyup <!--按键抬起-->

  • onkeydown <!--按键落下-->

  • onfocus <!--获取焦点-->

  • onblur <!--失去焦点-->

6.innerText和textContent区别?
  • innerText和textContent都是用来操作元素的文本(不会包含标签)

  • textContent可以获取到隐藏的元素的内容

  • innnerText获取不到

  • textContent只有高级浏览器才能用

  • innnerText所有浏览器都能用

7.元素隐藏方式哪些是占位和不占位?

  • display: none; 不占位

  • 占位 : visibility: hidden;

opacity: 0;

transform: translateX(10000px);

transform: scale(0);

/* transform: rotateY(90deg);占位 */

/* transform: skew(90deg); */

/* width: 0;占位 */

/* height: 0;占位 */

8.节点分类?

元素节点(标签);文本节点(标签的内容);属性节点(标签的属性);注释节点(注释)。

9.父节点,子节点,兄弟节点分别是?

父节点:

  • parentNode 父节点

  • parentElement 父元素节点

子节点 :

  • childNodes children 获取子元素节点

  • firstChild 获取第一个子节点

  • firstElementChild 获取第一个子元素节点

  • lastChild 获取最后一个子节点

  • lastElementChild 获取最后一个子元素节点

兄弟节点;

  • previousSibling 上一个兄弟节点

  • previousElementSibling 上一个兄弟元素节点

  • nextSibling 下一个兄弟节点

  • nextElementSibling 下一个兄弟元素节点

10.节点的增删改

  • 节点的添加,从末尾加 appendChild;从其他位置添加insertBefore;

  • 节点的修改repqublaceChild

  • 节点的删除removeChild ;

  • 删除整个ul

document.body.removeChild(ulNode);

ulNode.parentNode.removeChild(ulNode);

10.DOM和DOM2比较区别?

区别:dom0高级浏览器中同一个对象 绑定同一个事件 那么会覆盖

dom2高级浏览器 同一个对象绑定同一个事件的执行顺序是从上到下依次执行的

DOM2低级浏览器中 同一个对象绑定同一个事件的执行顺序:是从下到上依次执行

11.取消冒泡的三种方式有哪些?

  • // 方法1 event.cancelBubble = true;

  • // 方法2 event.stopPropagation(); 注:Propagation是传播的意思

  • // 方法3 event.stopImmediatePropagation();

// event高级浏览器可以直接使用

// 低级浏览器中的事件对象是window.event

12.事件流概念解释和分类?

  • 发生了事件之后的各个盒子的顺序。

  • 捕获事件流(网景) 最终很少用几乎不用

  • 冒泡事件流 :最终我们所用的事件传播都是冒泡(dom0和dom2事件流都是冒泡)

  • 标准DOM事件流 这个是我们现用的标准事件流,里面包含三个阶段: 有捕获 再去获取目标元素 最后冒泡,这个三个阶段当中的捕获和冒泡可以由程序员自己选择。但是通常情况我们都是使用默认 (冒泡)

13.事件委派概念,作用,和用法?

  • 什么时候用?

当一个元素内部子元素(儿子)很多,并且每个子元素(儿子)都要添加相同的事件的时候,我们可以使用事件委派来提高效率

出现新添加的东西,并且新添加的东西要和老的拥有同样的行为;此时我们就想事件委派;不用事件委派,老的身上会有想要的行为,而新添加的没有

  • 用法?事件委派的做法: 父元素添加事件监听,不给元素本身添加,事件发生后通过event的target属性去找真正发生事件的目标元素进行处理

  • 好处?事件委派的好处:可以大大降低内存的占用,并且可以提高效率

  • 总结

事件委派其实是借用事件冒泡去做的,因为事件冒泡导致内部所有的元素发生事件都会冒泡到祖先身上,我们不在子元素身上去添加事件监听和处理,而是在共同的祖先身上去添加让祖先去处理子元素发生的事件;祖先去处理其实就是通过事件对象当中的target 去获取到真正发生事件的子元素;对子元素进行处理

14.两对移入移出的区别?

  • onmouseover/onmouseout 如果涉及到事件切换或者冒泡必须使用双o

如果是一个父子元素模型,对父元素添加移入和移出,当鼠标移入父元素里面的子元素的时候,事件会移出然后再移入。也就是说事件元素会有切换事件委派的时候,必须使用这一对,大部分的时候我们使用的事件流都是冒泡,冒泡一定会涉及到事件的切换,所以我们常用双o事件;

  • onmouseenter/onmouseleave

如果是一个父子元素模型,对父元素添加移入和移出,当鼠标移入父元素里面的子元素的时候, 事件并没有移出然后再移入。也就是说事件元素没有切换;

总结:企业级开发中大部分使用的是onmouseenter/onmouseleave 因为不会发生事件切换 不会影响动态效果, 使用双o在部分浏览器下会发生卡顿现象。如果使用冒泡必须使用双o.

15.鼠标的三种位置?

offsetX offsetY 拿的是鼠标相对自身元素的水平距离和垂直距离 相对的是自身元素左上角(以自身元素左上角为原点)

clientX& clientY 拿的是鼠标相对视口的 水平距离和垂直距离 相对的是视口的左上角(以视口左上角为原点)

pageX pageY 拿的是鼠标相对页面(第一屏)的水平距离和垂直距离 相对的是页面的左上角(以页面左上角为原点)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值