js问题(2)

16.js中面向对象和面向过程的区别

答:

  • 面向过程

就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步步实现,使用的时候一个一个一次调用就可以了,例如c语言的特点

  • 面向对象

是把构成问题的事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。例如java语言的特点

17.什么是脚本?

答: 脚本script是使用一种特定的描述性语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件

18.cookies、sessionStorage和localStorage的区别?

  • cookie数据始终在同源的http请求中携带(即使不需要),即会在浏览器和服务器来回传递;而sessionStorage和localStorage不会自动把数据发送给服务器,仅仅在本地保存;并且

sessionStorage和localStorage的储存空间更大;
sessionStorage和localStorage有更多丰富易用的接口
sessionStorage和localStorage有各自独立的存储空间

  • 从存储大小来说,cookie数据大小不能超过4k。而sessionStorage和localStorage虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大
  • 从有效时间来说,cookie数据设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭数据依旧在;而localStorage是用来存储持久数据,浏览器关闭后数据不丢失;sessionStorage:数据在当前浏览器窗口关闭后自动删除

19.谈一下你对面向对象的理解?

  • 对象的组成:一个对象是由属性和方法组成的

  • 面向对象的理解:万物皆对象,面向对象会把事物抽象成对象的概念,就是说这个问题里面有那些对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法,问题得到解决

  • 面向对象的特点

  1. 抽象
  2. 封装
  3. 继承:就是为了代码复用,从父类上继承出一些方法和属性,子类也有自己的一些属性
  4. 多态:实际上是不同对象作用于同一操作产生不同的效果。多态的思想实际上是把“”想做什么和“谁去做分开”

20.什么是函数

答:函数是由事件的驱动的,或者当它被调用时执行的可重复使用的代码

21.什么是闭包?简述一下优缺点

答:闭包是有权访问另一个函数私有变量的函数叫闭包

  • 优点:避免变量污染,加强了封装性,逻辑性比较强的的可读性高,加载到内存中的执行效率高
  • 缺点:在内存中,造成内存浪费,如果滥用闭包会是灾难性的

23.怎么判断一个object是否是数组(array)?

  1. instanceof 用于判断一个变量是否是某个对象的实例
var arr=[];
console.log(arr instanceof Array)  //true

  1. constructor 属性返回对创建此对象的数组函数的引用,就是返回对象相对应的构造函数
console.log([].constructor == Array)  //true
  1. Array.isArray() 用于确定传递的值是否是一个Array。
Array.isArray(obj)

24.javascript中函数声明与函数表达式的区别?

  • 函数声明:

function 函数名称 (参数:可选){ 函数体 }

  • 函数表达式:

function 函数名称(可选)(参数:可选){ 函数体 }
区别如下:

  1. 以函数声明的方法定义的函数,函数名是必须的,而函数表达式的函数名是可选的,它可以是一个匿名函数或者说一个箭头函数
  2. 以函数声明的方法定义的函数,函数可以在函数声明之前调用,而函数表达式的函数只能在声明之后调用
  3. 以函数声明的方法定义的函数并不是真正的声明,他们仅仅可以出现在全局中或者嵌套在其他函数中
console.log("fn函数表达式之前调用开始")
fn()  //报错:fn is not a function
console.log('fn函数表达式之前调用结束')
var fn=function(){
    console.log("fn函数表达式声明执行")
}

因为在第一次调用fn()的同时,var fn 变量没有作为全局对象的一个属性而存在,且 fn 引用的匿名函数上下文也没有被初始化,所以在他之前调用失败。

接下来看fn2()函数声明是可以在声明之前调用的

console.log("fn2函数声明之前调用开始")
fn2()   //fn2函数声明执行
console.log('fn2函数声明之前调用结束')
function fn2(){
    console.log('fn2函数声明执行')
}

25.this一般的指向,以及如何改变指向

this指代那个对象

  1. 通常在函数中this指向的是调用函数的那个对象即谁调用指向谁,如x.fn()
  2. 事件函数中的this通常指向的是绑定事件的事件源元素,click单击事件
  3. 构造函数中的this,(使用new调用构造函数创建对象),通常指向的是new所创建出来的对象本身
  4. 全局范围的this通常指向的是全局对象(浏览器中是指window)

修改this指向:
使用js中的call()、apply()、bind()方法可以修改this的指向

Function.prototype.bind(thisArg) -- ES5

能够返回一个新函数,该新函数的主体与原函数主体一致,但当新函数被调用执行时,函数体中的 this 指向的是 thisArg 所表示的对象

Function.prototype.call(thisArg, val1, val2, ....)

调用函数执行,在函数执行时将函数体中的 this 指向修改为 thisArg 所表示的对象
val1, val2, … 表示传递给调用函数的实际参数列表

Function.prototype.apply(thisArg, array|arguments)

调用函数执行,在函数执行时将函数体中的 this 指向修改为 thisArg 所表示的对象,
array|arguments 表示调用函数的参数列表,使用数组或类数组的格式

下面给出完整例子帮助理解:

let obj={
    name:'zhangsan',
    age:18,
    provice:'广东',
    city:'深圳',
    myfn:function (x,y){
        console.log("我的名字是:"+this.name+"我的年龄为:"+this.age+"来自:"+x+y)
    }
}

let obj2={
    name:'lisi',
    age:18
}
//未修改函数的this指向时
obj.myfn("广东","深圳")  //我的名字是:zhangsan我的年龄为:18来自:广东深圳
//修改函数的this指向后
obj.myfn.call(obj2,"广东","汕头")  //我的名字是:lisi我的年龄为:18来自:广东汕头
obj.myfn.bind(obj2,"广东","梅州")()  //我的名字是:lisi我的年龄为:18来自:广东梅州
obj.myfn.apply(obj2,["广东","广州"])  //我的名字是:lisi我的年龄为:18来自:广东广州

26.javascript的typeof返回哪些数据类型

答:string,boolean,number,undefined,function,object

27.new操作符具体干了什么呢?

答:
new关键字主要的作用是继承:
当一个构造函数前加new的时候,背地里做了四件事

  1. 创建一个空对象
//创建一个空对象,并将其作为this
let obj=new Object()
  1. 将空对象的__proto__指向构造函数的prototype
obj.__proto__=Object.prototype
  1. 让构造函数的this指向obj,并执行了函数体
let result=Object.call(obj);
  1. 判断返回类型,如果是值就返回这个obj,如果是引用类型,返回这个引用对象
return typeof result ==="object"?result:obj;

28.什么是JSON?

答:

  1. JSON是一种轻量级的数据交换格式
  2. JSON独立于语言和平台,JSON解析器和JSON库支持许多不同的编程语言
  3. JSON的语言表示三种类型值,简单值(字符串,数值,布尔值,null),数组,对象

29.js中的3中弹出式命令是什么?

  1. alert() 警告提示框
  2. comfirm() 确认框用于显示一个带有指定消息和 OK 及取消按钮的对话框,根据用户点击确认框上的按钮返回true与false。
  3. prompt() 输入框用于显示可提示用户进行输入的对话框。如果用户单击提示框的取消按钮,则返回null。 如果用户单击确认按钮,则返回输入字段当前显示的文本。

30.javascript dom中有几种节点类型

答:一般地,一个节点至少拥有nodeType、nodeName、nodeValue这三个基本属性。即节点类型不同,这三个属性的值也不相同
我知道的nodeType属性返回节点类型的常用值。不同的类型对应不同的常数值,12中类型分别对应1到12的常数值:即

  1. 元素节点:nodeType===1
  2. 属性节点:nodeType===2
  3. 文本节点:nodeType===3
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值