表JS基本类型有什么?引用类型有什么?基本类型:number,string,boolean,undefined,null引用类型:基本类型以外的都是引用类型,如object/array/function/date等等关于基本类型与引用类型的区别可以详细看看@Naraku_的这篇文章:[ JS 进阶] 基本类型引用类型简单赋值对象引用概况起来有这么几个要点:1.我们无法给基本类型的对象添加属性和方法;var m1 = 123; = 'abc';console.log(); //输出:undefined2.基本类型对象的比较是值比较,而引用类型对象的比较是引用比较;var m1 = 123,m2 = 123;console.log(m1 === m2); //输出:truevar o1 = {},o2 = {};console.log(o1 === o2); //输出:false3.基本类型对象是存储在栈内存中的,而引用类型对象其实是一个存储在栈内存中的一个堆内存地址。
4.基本类型对象赋值时(执行=号操作),是在栈内存中创建一个新的空间,然后将值复制一份到新的空间里。
5.引用类型对象赋值时(执行=号操作),也是在栈内存中复制一份一样的值,但这个值是一个堆内存地址,所以被赋值的那个对象跟前者其实是一个对象。
var o1 = {};var o2 = o1; = 'abc';console.log(); // --> abc console.log(); // --> abco2.age = '123';console.log(o1.age); // --> 123console.log(o2.age); // --> 123JS中的常见对置对象类js的常见内置对象类:Date,Array,Math、Number、Boolean、String、Array、RegExp、Function... 来一道容易错的小题1.大家都知道typeof null输出Object。
那么null instanceof Object吗?console.log( typeof null ) //输出Object console.log( null instanceof Object) //输出什么?答案:false虽然typeof null输出Object,但null不是Object的一个实例。
null是一个基本类型。
之所以typeof null输出Object,跟浏览器的实现有关。
JS对象有哪几种创建方法这个问题经常会被问道,会写JavaScript的人都会创建对象,时时刻刻都在用对象,但真被问起这个问题,估计很多人都没认真思考过。
网上关于这个问题的答案也非常多,说法还不太一样,什么构造函数方法/原型方法/混合方法等等,乱七八糟的。
在这里,我试试捋一捋,希望能够给你一个清晰的答案。
1.字面量方式:这是最简单最基本的一种方法。
var obj = {};//创建了一个空的对象字面量方法有两种常用的形式。
一种是简单字面量,像上面那样先创建一个空对象,然后再给这个对象加属性和函数。
var obj = {};obj.attr1 = 123;obj.attr2 = 'abc';obj.func1 = function(){...};obj.func2 = function(){...};另一种是嵌入式字面量,像写JSON数据似的,直接在大括号中写属性和函数。
var obj = {attr1 : 123,attr2 : 'abc',func1 : function(){...},func2 : function(){...}};2.简单的构造函数方式通过new Person()这样的形式创建对象。
用new这个关键字是为了讨好习惯了C++/Java的程序员的使用习惯。
但也是JS的一大败笔(大牛都是这么说的,我只是有样学样)。
function Person(name,age){ = name;this.age = age;}var p1 = new Person('Peter',20);var p2 = new Person('Jack',21);3.原型方式function Person(){}Person.prototype.say = function(){...};var p1 = new Person();var p2 = new Person();跟简单的构造函数形式不同的是,绑在this上的name/age是p1/p2对象独占的(私有的),而绑在prototype上的say方法是p1/p2对象共享的(公有的)。
4.构造函数+原型有的人把这种方式称为“混合模式”,其实不是什么独特的模式,而是因为单纯地使用构造函数和单纯地使用原型方式都是不合适的。
试想一下,类的概念就是希望属于这个类的对象有着相同名称的属性和方法,但属性是私有的,方法是共享的,你叫什么名字,几岁,是你这对象私有的属性,但说话这动作是大家都一样,只是内容不一样而已,所有方法应该共享的。
结合上面的简单构造函数和原型,一个完整的构造函数应该是这样的:function Person(name,age){ = name;this.age = age;}Person.prototype.say = function(){console.log("My name is "++". I'm "+this.age+" years old.");}var p1 = new Person('Peter',20);var p2 = new Person('Jack',21);还有一种方法就是ES5提供的Object.create()简单实现下JS中的Map,forEach,reduceArray.prototype.map = function (fn) {var resultArray = [];for (var i = 0,len = this.length; i < len ; i++) {resultArray[i] = fn.apply(this,[this[i],i,this]);}return resultArray;}Array.prototype.forEach = function (fn) {for (var i = 0,len = this.length; i < len ; i++) {fn.apply(this,[this[i],i,this]);}}Array.prototype.reduce= function (fn) {var formerResult = this[0];for (var i = 1,len = this.length; i < len ; i++) {formerResult = fn.apply(this,[formerResult,this[i],i,this]);}return formerResult;}1.创建一个对象function Person(name, age) { = name;this.age = age;this.sing = function() { alert() }}2.谈谈This对象的理解。
this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。
但是总有一个原则,那就是this指的是调用函数的那个对象。
this一般情况下:是全局对象Global。
作为方法调用,那么this就是指这个对象3.事件、IE与火狐的事件机制有什么区别?如何阻止冒泡?1.我们在网页中的某个操作(有的操作对应多个事件)。
例如:当我们点击一个按钮就会产生一个事件。
是可以被JavaScript 侦测到的行为。
2.3.事件处理机制:IE是事件冒泡、火狐是事件捕获;4.5.ev.stopPropagation();6.4.什么是闭包(closure),为什么要用?待完善执行say667()后,say667()闭包内部变量会存在,而闭包内部函数的内部变量不会存在.使得Javascript的垃圾回收机制GC不会收回say667()所占用的资源,因为say667()的内部函数的执行需要依赖say667()中的变量。
这是对闭包作用的非常直白的描述.function say667() {// Local variable that ends up within closurevar num = 666;var sayAlert = function() { alert(num); }num++;return sayAlert;}var sayAlert = say667();sayAlert()//执行结果应该弹出的6675.如何判断一个对象是否属于某个类?使用instanceof (待完善)if(a instanceof Person){alert('yes');}6.new操作符具体干了什么呢?1、创建一个空对象,并且this 变量引用该对象,同时还继承了该函数的原型。
2、属性和方法被加入到this 引用的对象中。
3、新创建的对象由this 所引用,并且最后隐式的返回this 。
var obj = {};obj.__proto__ = Base.prototype;Base.call(obj);7.JSON 的了解JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
它是基于JavaScript的一个子集。
数据格式简单, 易于读写, 占用带宽小{'age':'12', 'name':'back'}8.js延迟加载的方式有哪些defer和async、动态创建DOM方式(用得最多)、按需异步载入js9.ajax 是什么?ajax 的交互模型?同步和异步的区别?如何解决跨域问题?待完善1.通过异步模式,提升了用户体验2.3.优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用4.5.Ajax在客户端运行,承担了一部分本来由服务器承担的工作,减少了大用户量下的服务器负载。
6.7.Ajax的最大的特点是什么。
8.Ajax可以实现动态不刷新(局部刷新)readyState属性状态有5个可取值:0=未初始化,1=正在加载2=以加载,3=交互中,4=完成9.ajax的缺点10.1、ajax不支持浏览器back按钮。