0%

DOCTYPE及其作用

DOCTYPE就是声明文档类型和DTD规范的,一个主要用途就是文件合法性验证,如果文件代码不合法,浏览器解析就会出一些差错。

HTML5

4.0有传统模式(包含所有元素)和严格模式(不包含废弃元素)

Read more »

前端安全

  • CSRF:跨站请求伪造(crooss-site request forgery)
  • XSS:跨站脚本攻击(cross-site scripting)
    Read more »

同源策略限制从一个源(协议,域名和端口(端口默认为80))加载的文档或脚本如何与来自于另一个源的资源进行交互,这是一个用于隔离潜在恶意文件的安全机制。

那么具体有什么限制呢?

  • Cookie、LocalStorage和IndexDB无法读取
  • DOM无法获得
  • AJAX请求不能发送
Read more »

  • 如何获取2017-03-10这样格式的日期
  • 获取随机数,要求是长度一致的字符串格式
  • 写一个能遍历对象和数组的通用forEach函数

关于对象补充一点:复制保存着对象的某个变量时,操作的是对象的引用,比如我们可以将对同一对象的引用的其中一个变量赋值为null,而不会影响其他指向这个对象的变量的值,但是当为对象添加属性的时候,操作的是对象本身,体现在当我们为保存着对象的某个变量添加属性的时候,其他所有的变量也会跟着受影响。

Read more »

我们首先来看一段代码

1
2
3
4
5
console.log(100);
setTimeout(function () {
console.log(200)
}, 1000);
console.log(300);

或许你觉得输出的结果应该是按照100,间隔一秒输出200,然后输出300的方式打印。但事实不然,正确的结果是100,300,间隔一秒输出200。

同步和异步的区别在于有没有阻塞程序进行,上面说的后者就没有阻塞程序的进行,这就是所谓的异步。

程序正常执行过程中,由于JS的单线程特性,一次不可以执行多个任务。在遇到异步代码的时候,会将异步代码放到任务队列里面,只有任务队列通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。并且所有同步任务都在主线程上执行,形成一个执行栈,一旦“执行栈”所有同步任务执行完毕,系统才读取“任务队列”

1
2
3
console.log(100);
alert(200); // 一秒钟之后点击确认才继续执行
console.log(300)

这个alert弹框就会阻塞程序,程序是同步进行的。

Read more »

  • 函数声明和函数表达式是什么,又有什么区别呢?

我们来看如下的代码:

1
2
3
4
5
6
7
8
9
fn();
function fn () {
//声明
}

fn1();
var fn1 = function () {
//表达式
}

我们知道函数声明和变量都会进行提升,在函数声明之前调用函数不会报错,因为编译器已经知道这个是一个函数了,可以调用。

但是对于函数表达式来说,将函数表达式赋值给变量的时候,变量是得到提升了,但是赋值操作是在执行过程中进行的,所以这里在表达式执行之前,fn1变量其实是undefined的。调用就会报错。

  • 我们再来看一个例子:
    1
    2
    console.log(a);
    var a = 100;

如果你觉得输出的结果是undefined,那么恭喜你已经对提升有了较好的理解了。

a作为一个全局变量得到了提升,在a未赋值之前,a都被认为是undefined。

函数在执行之前就已经确定了this和arguments的值

Read more »

构造函数大写字母开头,可以使用new操作符创建实例。

1
2
3
4
5
6
7
function Foo(name, age){
this.name=name
this.age = age
this.class = 'class-1'
// return this默认返回this实例对象
}
var f = new Foo('zhnagsan', 20)
  1. var a = {}是var a = new Object()的语法糖

  2. var a = []是var a = new Array()的语法糖

  3. function Foo(){}是var Foo = new Function(..)

  4. instanceof是用于判断引用类型属于哪个构造函数的方法。比如上述代码,f是Foo的一个实例,判断方法是f的_proto_属性,一层一层向上,能否对应到Foo的显式原型对象。f instanceof Object也是正确的,需要向上追溯两层。

  5. 所有引用类型,包括数组对象函数都可以自由扩展属性(除了null对象)

    1
    2
    3
    4
    var obj = {};obj.a = 100;
    var arr = [];arr.a = 100;
    function fn () {}
    fn.a = 100;
  6. 都有一个_proto_(隐式原型)属性,为一个普通对象

    1
    2
    3
    console.log(obj._proto_);
    console.log(arr._proto_);
    console.log(fn._proto_);
  7. 所有的函数都有一个prototype(显式原型)属性,是一个普通对象即原型对象;而原型对象有一个constructor属性,用来指定该对象的构造函数,比如M是个构造函数,那么M.prototype.constructor === M

    Read more »

作为css系列文章的第一篇,本文主要是通过阅读”css mastry”第三版整理而成,还希望大家指正。

在本篇文章中,我们着重学习理解CSS盒模型,外边距是如何以及为什么会发生合并的,不同的定位属性和值,浮动和清除浮动是如何工作的以及格式化上下文到底是个什么东西这五个问题。

Read more »