js面试题

javascript的基本数据类型

        Number  String  Boolean  Null  undefind  object是js中所有对象的父对象

js的基本规范

        不在同一行声明多个变量

        使用===或!==来比较true/false或者数值

        switch必须带有default分支

        函数应该有返回值

        for if else必须用大括号

        语句结束加分号

        命名要有意义,使用驼峰法命名

javascript有几种类型的值

        基本数据类型(存储在栈中)引用数据类型(存储在堆中)

        两种类型的区别:存储位置不同,原始数据类型直接存储在栈中简单数据段,占据空间小,大小固定,被频繁使用,放在栈中存储

                                    引用数据存储在堆中对象,占据空间大,大小不固定

堆和栈的区别?

        栈(stack):由编译器自动分配释放,存放函数参数值,局部变量

        堆:一般由程序员分配释放

javascript作用域链

        作用域链的原理和原型链很类似,如果这个变量在自己的作用域中没有,那么他会寻找父级,直到最高层

        js没有块级作用域,若要形成块级作用域,可通过function(){}立即执行的形式实现

this的理解

        this总是指向函数的直接调用者(而非间接调用者)

        如果有new关键字,this指向new出来的那个对象

        在事件中,this指向目标元素,特殊的IE的attachEvent中this总是指向全局对象window

什么是window对象,什么是document对象

        window对象代表浏览器中打开的一个窗口

        document对象代表整个html文档

        实际上,document对象是window对象的一个属性

如何判断一个对象是否属于某个类

        instanceof(需要被判断的对象,instanceof,类)

new操作符具体有什么作用?

        创建一个空对象,并且this变量引用该对象,同时还继承了该函数的原型

        属性和方法被加入this引用的对象中

        新创建的对象由this所引用,并且最后隐式的返回this        

什么是跨域问题?怎么解决

        不满足同源策略(协议、端口、ip相同),使用jsonp跨域或者cors跨域

call和apply方法的区别?

        call和apply的作用相同,动态改变某个类的某个方法的运行环境

        使用call()传递给函数的参数必须逐个列举出来

        apply()传递给函数的是参数数组

GET和Post两种基本请求方式的区别?

        GET把参数包含在URL中

        Post通过request body传递参数

        区别?

                传送方式:get通过地址栏传输,post通过报文传输

                传送长度:get参数有长度限制(受限于url长度)而post无限制

                                get产生一个TCP数据包,POST产生两个TCP数据包

        建议:

                get方式的安全性比Post方式要差些

                在数据查询时,建议使用Get方式,做数据添加,修改、删除建议用Post

js常用的事件

        onchange:当input框,textarea框或select下拉框等元素的内容发生变化时触发

        onclick:点击事件

        onfoucus:获取焦点事件(鼠标的光标)

        onblur: 失去焦点

        onload:加载事件

        onkeydown:键盘按下事件

        onkeypress:释放键盘按键事件

js数组操作的方法

        map()将数组中每个元素调用一个提供的函数,结果作为一个新的数字返回,并不改变原来的数组

        forEach()循环,

        filter()将满足条件的元素作为一个新数组返回

        every()将所有元素进行判断返回一个布尔值,所有元素都满足判断条件,则返回true

        some()如果存在元素满足条件,则返回true,只要有一个正确就返回true        

        reduce()所有元素调用返回函数,返回值为最后的结果,传入的值必须是函数类型

        push()在数组后面添加新元素

        pop()删除数组最后一个元素,此方法改变数组长度

        shift()在数组后面删除第一个元素

        unshift()删除数组开头的第一个元素

        isArray()判断一个对象是不是数组

        concat()将多个数组拼接成一个数组

        tostring()将数组转化为字符串

        join()添加数组中元素

        splice(开始位置,删除个数,元素):实现增删改查

 js中字符串常用的方法

        charcodeAt(index)返回一个整数,代表指定位置字符的unicode编码

        fromcharcode([code1[,code2···]])从一些Unicode字符串中返回一个字符串

        charAt(index)返回指定索引位置处的字符串

        slice(start[,end])返回字符串片段

        substring(start,end)返回位于string对象中指定位置的字符串

        substr(start [,length])从指定位置开始的指定长度的字符串

        index of(substr [,start index])返回string对象内第一次出现子字符串位置,如果没有找到,返回-1

        lastindexof(substr [,startindex])返回string对象最后一次出现子字符串位置,如果没有找到,返回-1

        search(reExp) 返回与正则表达式查找内容匹配的第一个字符串位置

        concat([string1[,string2···]]) 返回字符串值,包含两个或多个提供的字符串的连接

        split([separator[,limit]])字符串分割为子字符串

        toLowerCase  字符串中字母转小写

        toupperCase 字符串中字母转大写

 说一下从输入URL到页面加载完中间发生了什么?

1、DNS域名解析  2、发起TCP连接(三次握手)  3、发送HTTP请求,接受HTTP响应        4、断开TCP连接(四次挥手)  5、浏览器解析HTML代码,请求js,css等资源,最后进行页面渲染,呈现给用户

解释 JavaScript 中“undefined”和“not defined”之间的区别

  

undefined是javascript语言中定义的五个原始类中的一个,换句话说,undefined并不是程序报错,而是程序允许的一个值。
not defined是javascript在运行我们的javascript代码时,遇到没有定义就用来运算的变量时爆出来的错误。

     

请描述值类型(基本数据类型)和引用类型的区别

 

1.值类型:String(字符串),Number(数字),Boolean(布尔类型),Undefinde
2.引用类型:Array(数组),Object(对象),Function(函数)

储存方式不一样:值类型是栈存储,引用类型是堆存储

变量赋值:基本数据类型是直接把值赋给变量。而引用类型是,把值的地址复制给新变量,通过地址再找到内容。

js作用域?

作用域就是变量与函数的可访问范围,即作用域控制着函数与变量的可见性和生命周期

1.全局作用域

任何地方都能访问到的对象拥有全局作用域

1.1.函数外面定义的变量拥有全局作用域,全局变量拥有全局作用域,网页中所有脚本和函数均可使用。全局变量在页面关闭后销毁

1.2.未定义直接赋值的变量自动声明为全局变量拥有全局作用域

1.3.window对象的属性拥有全局作用域

HTML中,全局变量是window对象,所有数据变量都属于window对象

2.局部作用域

局部作用域一般只在固定的代码片段内能访问到,最常见的例如函数内部,所以也称为函数作用域

变量在函数内声明,变量为局部作用域

局部变量:只能在函数内访问

ES6的块级作用域

ES6引入了块级作用域,明确允许在块级作用域中申明函数,let和const命令都涉及块级作用域

块级作用域允许声明函数只在使用大括号的情况下成立,如果未使用大括号报错

 什么是 JavaScript 中的提升操作

用var声明的变量提升,其只是变量提升了,而没有进行赋值的提升

 什么是JavaScript原型,原型链 ? 有什么特点?

JavaScript 常被描述为一种基于原型的语言——每个对象拥有一个原型对象,当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾

原型对象也可能拥有原型,并从中继承方法和属性,一层一层、以此类推。这种关系常被称为原型链 (prototype chain),它解释了为何一个对象会拥有定义在其他对象中的属性和方法

在对象实例和它的构造器之间建立一个链接(它是__proto____属性,是从构造函数的prototype属性派生的),之后通过上溯原型链,在构造器中找到这些属性和方法

 浏览器是如何渲染页面的?

1.根据html文件构建DOM树和CSSOM树。构建DOM树期间,如果遇到JS,阻塞DOM树及CSSOM树的构建,优先加载JS文件,加载完毕,再继续构建DOM树及CSSOM树。

2.构建渲染树(Render Tree)。

3.页面的重绘(repaint)与重排(reflow,也有称回流)。页面渲染完成后,若JS操作了DOM节点,根据JS对DOM操作动作的大小,浏览器对页面进行重绘或是重排。

 简述同步与异步的区别?

同步就相当于是 当客户端发送请求给服务端,在等待服务端响应的请求时,客户端不做其他的事情。当服务端做完了才返回到客户端。这样的话客户端需要一直等待。用户使用起来会有不友好。

异步就是,当客户端发送给服务端请求时,在等待服务端响应的时候,客户端可以做其他的事情,这样节约了时间,提高了效率。

 什么是promise

 

一.Promise是异步编程的一种解决方案,它是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。

从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同

样的方法进行处理。promise对象是一个构造函数,用来生成Promise实例;

二.promise的两个特点    对象状态不受外界影响 && 一旦状态改变,就不会再变,任何时候都可以得到结果(pending状态-->fulfilled || pending-->rejected)

 async/await是什么?

1. Async—声明⼀个异步函数(async function someName(){...})

2. ⾃动将常规函数转换成Promise,返回值也是⼀个Promise对象

3. 只有async函数内部的异步操作执⾏完,才会执⾏then⽅法指定的回调函数

4. 异步函数内部可以使⽤await

5. Await—暂停异步的功能执⾏(var result = await someAsyncCall();)

6. 放置在Promise调⽤之前,await强制其他代码等待,直到Promise完成并返回结果

7. 只能与Promise⼀起使⽤,不适⽤与回调

8. 只能在async函数内部使⽤

 箭头函数的this指向哪里?

1.在全局环境下,this 始终指向全局对象(window)

2.对象内部方法的this指向调用这些方法的对象,函数的定义位置不影响其this指向,this指向只和调用函数的对象有关。

多层嵌套的对象,内部方法的this指向离被调用函数最近的对象(window也是对象,其内部对象调用方法的this指向内部对象, 而非window)。

3.构造函数中的this与被创建的新对象绑定。

 null与undefined的区别是什么?

null表示"没有对象",即该处不应该有值。

undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。

说一下 call,apply,bind区别

 

1)apply,call和bind都是 用来改变this的指向

2)apply和call会让当前函数立即执行,而bind会返回一个函数,后续需要的时候再调用执行

说一下你对JS面向对象的理解?

但JS中对象与纯面向对象语言中的对象是不同的,ECMA标准定义JS中对象:无序属性的集合,其属性可以包含基本值、对象或者函数。可以简单理解为JS的对象是一组无序的值,其中的属性或方法都有一个名字,根据这个名字可以访问相映射的值(值可以是基本值/对象/方法)。

 谈谈你对原型链的理解

访问一个对象属性时,先在自身属性中查找,找到返回

如果没有,再沿着__proto__这条链向上查找,找到返回

如果最终没有找到,返回undefined

 什么情况造成跨域?

同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。

设想这样一种情况:A网站是一家银行,用户登录以后,又去浏览其他网站。如果其他网站可以读取A网站的 Cookie,会发生什么?

很显然,如果 Cookie 包含隐私(比如存款总额),这些信息就会泄漏。更可怕的是,Cookie 往往用来保存用户的登录状态,如果用户没有退出登录,其他网站就可以冒充用户,为所欲为。因为浏览器同时还规定,提交表单不受同源政策的限制。

由此可见,"同源政策"是必需的,否则 Cookie 可以共享,互联网就毫无安全可言了。

 

 

                

        

        

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值