分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

JS常见问题总结一

发布时间:2023-09-06 01:08责任编辑:彭小芳关键词:暂无标签

不废话,直接上题

一、变量类型和计算

1.1 js中使用typeof能得到的哪些类型?

答:1.值类型 VS 引用类型

typeof undefined ??//undefinedtypeof ‘abc‘ ??????//stringtypeof 123 ????????//numbertypeof true ???????//booleantypeof {} ?????????//objecttypeof [] ?????????//objecttypeof null ???????//objecttypeof console.log //function

  

1.2 何时使用=== , 何时使用==?

答:强制类型转换:字符串拼接、==运算符、if语句、逻辑运算 ,其余全用三等号

 1 100 == ‘100‘ ??????//true 2 0== ‘‘ ????????????//true 3 null == undefined ?//true 4 if (obj.a == null) { 5 ????//这里相当于 obj.a === null || obj.a === undefined的简写形式 6 ????//这是JQuery源码中的推荐写法 7 } 8 console.log(10 && 0) ??//0 9 console.log(‘‘ || ‘abc‘) ?//‘abc‘10 console.log(!window.abc) ?//true11 12 //判断一个变量会被当作 true 还是 false13 var a = 10014 console.log(!!a)

1.3 Js有哪些内置函数?

答:数据封装类对象

            Object , Array , Boolean , Number , String , Function , Date , RegExp , Error。

1.4 Js变量按照存储方式区分为哪些类型,并描述其特点

 1 //值类型 2 var a = 10 3 var b = a 4 a = 11 5 console.log(b) ????//10 6 ?7 //引用类型 8 var obj1 = {x:100} 9 var obj2 = obj110 obj1.x = 20011 console.log(obj2.x) ?//200

 1.5 如何理解json?

 答:JSON只不过是一个JS对象而已

          JSON.stringify({a:10,b:20})
          JSON.parse(‘{"a":10,"b":20}‘)

二、原型和原型链

知识点:

1.构造函数

2.原型五大规则

   所有的引用类型(数组、对象、函数),都具有对象特性,即可自由扩展属性(除了“null”以外);

   所有的引用类型(数组、对象、函数),都有一个_proto_属性(隐式属性),属性值是一个普通的对象;

   所有的函数,都有一个prototype属性(显式属性),属性值也是一个普通对象;

   所有的引用类型(数组、对象、函数),_proto_属性值指向它的构造函数的“prototype”属性值;

   当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去它的_proto_(即它的构造函数的prototype)中寻找。

3.原型链

4.instanceof:用于判断引用类型属于哪个构造函数的方法

 f的_proto_一层一层往上,能否对应到Foo.prototype,再试着判断f.instanceof Object。

2.1 如何准确判断一个变量是数组类型?

var arr = []arr instanceof Array ??//truetypeof arr ????????//object ?????//typeof 是无法判断是否是数组的Object.prototype.toString.call(arr) === ‘[object Array]‘;

2.2 写一个原型链继承的例子。

答:

var Parent = function(name){ ?this.name = name || ‘parent‘ ;} ;Parent.prototype.getName = function(){ ?return this.name ;} ;Parent.prototype.obj = {a : 1} ;var Child = function(name){ ?Parent.apply(this,arguments) ;} ;Child.prototype = Parent.prototype ;var parent = new Parent(‘myParent‘) ;var child = new Child(‘myChild‘) ;console.log(parent.getName()) ; //myParentconsole.log(child.getName()) ; //myChild

2.3 描述new一个对象的过程。

三、作用域和闭包

3.1 说一下对变量提升的理解

函数声明会提升,一般的变量以及变量表达式不提升

3.2 说明this几种不同的使用场景

 答:1.作为构造函数执行

     2.作为对象属性执行

     3.作为普通函数执行

     4.call,apply,bind

//call , apply , bindfunction fn1(name,age){ ???alert(name) ???console.log(this) ??}fn1.call({x:100},‘Lily‘,20) ??//弹出Lily,this ={x:100}function fn2(name,age){ ???alert(name) ???console.log(this) ??}fn2.apply(({y:200},[‘Lily‘,20])) //弹出Lily,this ={y:200}var fn3 = function(name,age){ ???alert(name) ???console.log(this)}.bind({z:300})fn3(‘Lily‘,20) ?????????//弹出Lily,this ={z:300}

3.3 创建10个<a>标签,点击的时候弹出来对应的序号

var ifor (var i = 0; i < 10; i++) { ???(function(i){ ???????var a = document.createElement(‘a‘) ???????a.innerHTML = i + ‘<br>‘ ???????a.addEventListener(‘click‘,function(e){ ???????????e.preventDefault() ???????????alert(i) ???????}) ???????document.body.appendChild(a) ???})(i)}

 

 

3.4 如何理解作用域

1.自由变量

var a = 100function F1(){ ???var b = 200 ???function F2(){ ???????var c=300 ???????//当前的作用域没有定义的变量,即“自由变量” ???????console.log(a) //自由变量 ???????console.log(b) ?//自由变量 ???????console.log(c) ???}}

2.闭包

function F1(){ ???var a = 100 ???//返回一个函数(函数作为返回值) ???return function(){ ???????console.log(a) ???}}//f1 得到一个函数var f1 = F1()var a = 200f1() ???????//a=100

3.5 实际开发中闭包的应用

 

JS常见问题总结一

原文地址:http://www.cnblogs.com/Yannk/p/7471472.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved