JS常见问题总结一

不废话,直接上题

一、变量类型和计算

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

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

typeof undefined   //undefined
typeof ‘abc‘       //string
typeof 123         //number
typeof true        //boolean
typeof {}          //object
typeof []          //object
typeof null        //object
typeof 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)  //true
11
12 //判断一个变量会被当作 true 还是 false
13 var a = 100
14 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 = obj1
10 obj1.x = 200
11 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   //true
typeof 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()) ; //myParent
console.log(child.getName()) ; //myChild

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

三、作用域和闭包

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

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

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

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

2.作为对象属性执行

3.作为普通函数执行

4.call,apply,bind

//call , apply , bind
function 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 i
for (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 = 100
function 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 = 200
f1()        //a=100

3.5 实际开发中闭包的应用

时间: 2024-10-10 07:43:46

JS常见问题总结一的相关文章

JS常见问题总结二

四.异步 console.log(100) setTimeout(function(){ console.log(200) }) console.log(300) 4.1 同步和异步的区别是什么?分别举一个同步和异步的例子. 答:同步会阻塞代码执行,而异步不会:alert是同步,setTimeout是异步 4.2 一个关于setTimeout的笔试题 console.log(1) setTimeout(function(){ console.log(2) },0) console.log(3)

Vue.js常见问题

1.Vuejs组件 vuejs构建组件使用 Vue.component('componentName',{ /*component*/ }): 这里注意一点,组件要先注册再使用,也就是说: Vue.component('mine',{ template:'#mineTpl', props:['name','title','city','content'] }); var v=new Vue({ el:'#vueInstance', data:{ name:'zhang', title:'this

JS常见问题

语法错误 由于编程语言中的语法比自然语言的语法要严格得多,因此在编写脚本时对细节应倍加关注.例如,如果您本意是将字符串作为某个参数,但是在键入时忘了使用引号引起来,就会产生问题. 脚本解释顺序 对 JScript 的解释是 Web 浏览器的 HTML 语法分析处理的一部分.因此,如果在文档的 <HEAD> 标识中放置了一个脚本,则将在检查所有的 <BODY> 标识之前加以解释.如果在 <BODY> 标识中将创建对象,但由于在分析处理 <HEAD> 标识时这些

js常见问题之为什么点击弹出的i总是最后一个

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>for</title> <style type="text/css"> li{ height:50px; } </style> </head> <body> <ol> <l

Ember.js入门教程、博文汇总

第一章 对象模型 Ember.js 入门指南——类的定义.初始化.继承 Ember.js 入门指南——类的扩展(reopen) Ember.js 入门指南——计算属性(compute properties) Ember.js 入门指南——观察者(observer) Ember.js 入门指南——绑定(bingding) Ember.js 入门指南——枚举(enumerables) Ember.js 入门指南之七第一章对象模型小结 第二章 模板 Ember.js 入门指南——handlebars基

javascript学习总结

牛腩中在页面直接修改新闻类别时使用到js文件,当时还因为使用多个js文件由于引用顺序不同而出现错误,当时的理解js可以用来验证发往服务器的数据,就是封装了一些函数供外部引用的文件.学习完牛腩和姜昊的js视频后,认识到js是基于对象和事件驱动的客户端脚本语言,常用来给HTML网页添加动态功能.脚本语言不需要编译,一般都有相应的脚本引擎来解释执行,脚本程序在执行时,是由系统的一个解释器,将其一条条的翻译成机器可识别的指令,并按程序顺序执行.因为脚本在执行时多了一道翻译的过程,所以它比二进制程序执行效

document.body的一些用法以及js中的常见问题

document.body的一些用法以及js中的常见问题 网页可见区域宽: document.body.clientWidth; 网页可见区域高: document.body.clientHeight; 网页可见区域宽: document.body.offsetWidth    (包括边线的宽); 网页可见区域高: document.body.offsetHeight   (包括边线的宽); 网页正文全文宽: document.body.scrollWidth; 网页正文全文高: documen

D3.js使用过程中的常见问题(D3版本D3V4)

目录 一.学习D3我必须要学习好SVG矢量图码? 二.如何理解D3给Dom节点绑定数据时的Update.Enter和Exit模式 三.D3绑定数据时用datum与data有什么不一样? 四.SVG图中用attr来设置属性和用style来设置样式时,用style来设置样式的权重会更高 五.D3使用链式写法时,写完transition动画后不能链着继续写append添加元素操作 六.如何给path设置缓动? 七.D3普通的缓动动画 八.给节点添加title,鼠标mouseover显示普通提示文本效果

js 入门级常见问题

写在前面:以下是个人总结的关于js常见的入门级的问题一些总结. js是有 ECMAScript Dom Bom 三部分组成. 1,undefined,NaN,Null,infinity 1) undefined 是undefined 类型 var a; //声明变量后不赋值 typeof 类型判断方法 console.log(typeof(a))  //undefined 2) NaN 是 number 型 表示不是一个数字 var a=123; var b="abc"; a-b 得到