1、什么叫优雅降级和渐进增强?
优雅降级:Web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器,则代码会检查以确认它们是否能正常工作。由于IE独特的盒模型布局问题,针对不同版本的IE的hack实践过优雅降级了,为那些无法支持功能的浏览器增加候选方案,使之在旧式浏览器上以某种形式降级体验却不至于完全失效。
渐进增强:以恪守web标准的标签为基础,即在所有浏览器中可用。然后通过css样式和必要的js来为更先进的浏览器提供渐进式的增强体验。构建网站时分层开发,主要关注网站内容的易访问性和用户的模式。
2、null和undefined的区别?
null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。
当声明的变量还未被初始化时,变量的默认值为undefined;null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。
undefined表示 “缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:
(1). 变量被声明了,但没有赋值时,就等于 undefined
(2). 调用函数时,应该提供的参数没有提供,该参数等于 undefined
(3). 对象没有赋值的属性,该属性的值为 undefined
(4). 函数没有返回值时,默认返回 undefined(函数始终都会有一个返回值,即便不是显式返回,也会隐式返回一个undefined。)
null表示“没有对象”,即该处不应该有值。典型用法是:
(1). 作为函数的参数,表示该函数的参数不是对象
(2). 作为对象原型链的终点
3、变量提升
当js执行过程进入新的函数时,这个函数内被声明的所有变量都会被移动(或者说提升)到函数最开始的地方。被提升的只有变量的声明,与之相关的赋值操作并不会被提升。函数域始终优于全局域。
4、js常用的“五六七”
(1)五种基本类型:number、string、boolean、null、undefined
(2)六种返回格式:number、string、boolean、undefined、object、function(typeof返回的值)
(3)七种数据类型:number、string、boolean、null、undefined、array、object
5、获取全局对象的方法
利用浏览器提供的全局对象window;在构造器函数之外使用this关键字。不使用new操作符调用构造函数的时候,this值指向的是全局对象,也就是说,当我们声明了一个构造函数,但没有通过new来调用它的时候,代码就会返回undefined。
6、prototype与Property的用法区别
prototype为类型(函数)定义动态的属性和方法,而Property为类型定义“静态”的属性和方法。
例子一(JavaScript中允许添加行为的类型):可以在类型上使用proptotype来为类型添加行为。这些行为只能在类型的实例上体现。 JS中允许的类型有Array, Boolean, Date, Enumerator, Error, Function, Number, Object, RegExp, String
例子二(prototype使用的限制):在实例上不能使用prototype,否则发生编译错误
例子三(如何定义类型上的静态成员):用Property, 可以为类型定义“静态”的属性和方法,直接在类型上或实例上定义即可
js对象的原型(prototype)自己本身也可以是对象,也可以有属性(property),对于js对象的(prototype)的赋值操作跟普通对象属性的创建 没什么不同。
通过构造器函数的prototype属性来增加该构造器所能提供的功能,如果不想将属性或方法逐一添加到原型对象中,那么,可以另外定义一个对象,然后将其覆盖到之前的原型上。在向prototype属性中添加完所有的方法和属性之后,就可以直接用该构造器新建对象