首先,我们看一下DOM级别和兼容性:

之前好像在某本上看到说DOM有0级,实际上,DOM0级标准是不存在的。DOM有1、2、3三个级别。DOM1级由两个模块组成(DOM Core和DOM HTML),其中,DOM核心规定的是如何映射基于XML的文档结构,以便简化对文档中任意部分的访问和操作。DOM HTML模块则在DOM核心的基础上加以扩展,添加了针对HTML的对象和方法。DOM2级在原来DOM的基础上又扩充了视图和用户界面事件、范围、遍历(迭代DOM文档的方法)等细分模块,而且通过对象接口增加了对CSS(Cascading Style Sheets,层叠样式表)的支持。DOM3级则进一步扩展了DOM,引入了以统一方式加载和保存文档的方法–在DOM加载和保存(DOM Load and Save)模块中定义;新增了验证文档的方法–在DOM验证(DOM Validation)模块中定义。

一、六种数据类型

Javascript是一种弱数据类型,这种弱数据类型有什么特征呢?看看下面的例子:

JavaScript一共有6种数据类型,其中五种原始类型(基本类型),一种对象类型(引用类型)。

引用类型:

object,包括Object类型、Array类型、Date类型、RegExp类型、Function类型。

基本类型:

number、string、boolean、null、undefined。

类型的转换和检测:

(1)隐式转换:巧用+、-、==规则转换类型

num-0 这样可以将字符串转化为数字

例如:“17”-7     //10

num+ " "  这样可以将数字转换为字符串

例如:“17”+7      //177

类型相同,用===检测是否相等,类型不同,尝试类型转换和比较,部分规则为:

null==undefined   相等

number==string 转number

boolean==?转number

object==number|string 尝试对象转为基本类型

其他:false

例如:
注意:===是绝对等的意思,只有类型和数值都相等才会成立。


更多:


(2)类型检测

检测方法:typeof、instanceof、Object.prototype.toString、constructor、duck type

typeof和instanceof比较常用,其中typeof比较适合函数对象和基本类型的判断,instanceof常用于判断对象类型,其判断专责是基于原型链判断的。例如:

typeof 100   //"number"

typeof ture   //"boolean"

typeof(undefined)  //"undefined"

typeof new Object()  //"object"

typeof [1,2]  //"object"

typeof NAN   //"undefined"

typeof function  //“function”

typeof null //"object"

备注:历史上曾经把null类型===''null'',但是造成许多网站没有办法正常访问,后来就决定null返回的是Object对象。所以typeof null==="object"  //true

注意:不同window或iframe间的对象类型检测不能使用instanceof!

更多:

二、表达式和运算符

表达式类型:原始表达式、初始化表达式、函数表达式、属性访问表达式、调用表达式、对象创建表达式。

初始化表达式:new Array(1,2)、[1,2]等

属性访问表达式:var o={x:1}; o.x;o['x]

调用表达式:func()

对象创建表达式:new Object;

运算符:逗号“,”、delet、in、new、this

逗号用法:a,b

如:var val=(1,2,3)

delet用法:  delet obj.x

如:var obj={x:1};

obj.x;   //1

delet obj.x

obj.x;   //undefined

注意:从IE9开始,新增的configurable标签,当这个的值为true的元素才可以被delet。创建对象时,属性默认的configurable的值是true。

in的用法:window.x=1;

'x' in window;     //true

更多:

三、语句

语句分别有:block、var、try catch、function、for...in、with

注意:js中没有块级作用域。所以在for循环中定义的变量的作用域会被扩大。即在for循环之后仍然可以访问for循环里面定义的变量。

try catch:

function:

函数声明:

fd();  //true

function fd(){...}

函数表达式:

var fe=function(){...}

注意:函数声明会在执行之前生效,所以在函数之前调用该函数也可以。但是函数表达式不会在执行之前生效,所以不能提前。

for...in:

var p;

var obj={x:1,y:2}

for(p in obj){....}

注意:

for...in的遍历顺序是不确定的,只是会把该遍历的每一个元素都遍历输出,但是不一定按照定义时候的顺序。而且,当enumerable为false时,不能用for...in遍历。另外,for...in遍历对象属性时受原型链影响。

严格模式:

严格模式是一种特殊的运行模式,它修复了部分语言上的不足,提供更安强的错误检查,并增强安全性。严格模式是向上兼容的。

严格模式和普通模式的区别:

①不允许使用with,若使用会报错(语法错误)

②不允许未声明的变量被赋值

③arguments变为参数的静态副本

④delete参数、函数名报错
⑤delete不可配置的属性也会报错

⑥对象字面重复属性名报错

⑦禁止八进制字面量

⑧eval、arguments变为关键字,不能作为变量、函数名

四、对象

对象中包含一系列属性,这些属性是无序的。每一个属性都有一个字符串key和对应的value。

数据属性:configurable、enumerable、writable、value

访问器属性:configurable、enumerable、get、set,访问器属性不能直接定义,必须使用Object。definedProperty()来定义。

创建对象

第一种是使用new操作符后跟Object构造函数

如下所示:

var person = new Object(); person.name = "Nicholas"; person.age = 29;

这种方法要注意原型链的问题:

特别注意,并不是所有的对象都会继承object:

另一种方式是使用对象字面量表示法。

var person = { name : "Nicholas", age : 29 };

另外,使用对象字面量语法时,如果留空其花括号,则可以定义只包含默认属性和方法的对象,如:

var person = {}; //与 new Object()相同

person.name = "Nicholas"; person.age = 29;

属性操作

属性操作包括:读写对象属性、属性异常、删除属性、检测属性、枚举属性

属性异常:


删除属性:

检测属性:

用hasOwnProperty()方法来判断某个对象是否有某个属性,用propertyIsEnumerable()方法判断某个属性是否可以枚举。

extensible标签:

设计模式

①工厂模式

function createPerson(name, age, job){

var o = new Object();

o.name = name;

o.age = age;

o.job = job;

o.sayName = function(){

alert(this.name);

};

return o;

}

var person1 = createPerson("winty", 29, "Software Engineer");

var person2 = createPerson("LuckyWinty", 27, "Student");

②构造函数模式

function Person(name, age, job){

this.name = name;

this.age = age;

this.job = job;

this.sayName = function(){

alert(this.name);

};

}

var person1 = new Person("Winty", 29, "Software Engineer");

var person2 = new Person("LuckyWinty", 27, "Student");

③原型模式

function Person(){ }

Person.prototype.name = "Winty";

Person.prototype.age = 29;

Person.prototype.job = "Software Engineer";

Person.prototype.sayName = function(){

alert(this.name);

};

var person1 = new Person();

person1.sayName(); //"Winty"

var person2 = new Person();

person2.sayName(); //"Winty"

alert(person1.sayName == person2.sayName); //true

④组合使用构造函数模式和原型模式

function Person(name, age, job){

this.name = name;

this.age = age;

this.job = job;

this.friends = ["Shelby", "Court"];

}

Person.prototype = {

constructor : Person,

sayName : function(){

alert(this.name);

}

}

var person1 = new Person("winty", 29, "Software Engineer");

var person2 = new Person("LuckyWinty", 27, "Student");

person1.friends.push("Van");

alert(person1.friends); //"Shelby,Count,Van"

alert(person2.friends); //"Shelby,Count"

alert(person1.friends === person2.friends); //false

alert(person1.sayName === person2.sayName); //true

⑤动态原型模式

function Person(name, age, job){

this.name = name;

this.age = age;

this.job = job;

if (typeof this.sayName != "function"){

Person.prototype.sayName = function(){

alert(this.name);

};

}

}

var friend = new Person("Winty", 29, "Software Engineer");

friend.sayName();

⑥:寄生构造函数模式

function Person(name, age, job){

var o = new Object();

o.name = name;

o.age = age;

o.job = job;

o.sayName = function(){

alert(this.name);

};

return o;

}

var friend = new Person("Winty", 29, "Software Engineer");

friend.sayName(); //"Winty"

⑦稳妥构造函数模式

所谓稳妥对象,指的是没有公共属性,而且其方法也不引用this的对象。稳妥对象最适合在一些安全的环境中(这些环境中会禁止使用this和new),或者在防止数据被其他应用程序(如Mashup程序)改动时使用。稳妥构造函数遵循与寄生构造函数类似的模式,但有两点不同:一是新创建对象的实例方法不引用this;二是不使用new操作符调用构造函数。按照稳妥构造函数的要求,可以将前面的Person构造函数重写如下。

function Person(name, age, job){

var o = new Object();

o.sayName = function(){

alert(name);

};

return o;

}

----未完待续

欢迎关注我的个人微信订阅号:前端生活

转载请注明出处!

JS详细入门教程(上)的更多相关文章

  1. gulp详细入门教程

    本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...

  2. ant使用指南详细入门教程

    这篇文章主要介绍了ant使用指南详细入门教程,本文详细的讲解了安装.验证安装.使用方法.使用实例.ant命令等内容,需要的朋友可以参考下 一.概述 ant 是一个将软件编译.测试.部署等步骤联系在一起 ...

  3. <转载>ant使用指南详细入门教程 http://www.jb51.net/article/67041.htm

    这篇文章主要介绍了ant使用指南详细入门教程,本文详细的讲解了安装.验证安装.使用方法.使用实例.ant命令等内容,需要的朋友可以参考下 一.概述 ant 是一个将软件编译.测试.部署等步骤联系在一起 ...

  4. Kibana详细入门教程

    Kibana详细入门教程   目录 一.Kibana是什么 二.如何安装 三.如何加载自定义索引 四.如何搜索数据 五.如何切换中文 六.如何使用控制台 七.如何使用可视化 八.如何使用仪表盘 一.K ...

  5. gulp详细入门教程(转载)

    本文转载自: gulp详细入门教程

  6. Docker最详细入门教程

    Docker原理.详细入门教程 https://blog.csdn.net/deng624796905/article/details/86493330 阮一峰Docker入门讲解 http://ww ...

  7. React JS快速入门教程

    翻译至官方文档<Tutorial>http://facebook.github.io/react/docs/tutorial.html 转载请注明出处:http://blog.csdn.n ...

  8. ActiveMQ详细入门教程系列(一)

    一.什么是消息中间件 两个系统或两个客户端之间进行消息传送,利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,它可以在分布式环境下 ...

  9. 一款简单而不失强大的前端框架——【Vue.js的详细入门教程①】

    ↓— Vue.js框架魅力 —↓ 前言       Vue.js 是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.V ...

随机推荐

  1. 如何在select下拉列表中添加复选框?

    近来在给一个公司做考试系统的项目,遇到的问题不少,但其中的几个让我对表单的使用颇为感兴趣,前端程序员都知道,下拉列表有select标签,复选框有checkbox,但是两者合在一起却少有人去研究,当时接 ...

  2. python Django session/cookie

    一, Cookie #cookie # def cook1(request): # print(request.COOKIES) # 查看cooke # # print(request.get_sig ...

  3. GDB调试汇编分析

    GDB调试汇编分析 代码 本次实践我参照了许多先做了的同学的博客,有卢肖明,高其,张梓靖同学.代码借用的是卢肖明同学的代码进行调试运行. GCC编译 使用gcc -g gdbtest.c -o gdb ...

  4. C#_技巧:字符串分组排序

    思想//GroupBy+ToDictionary实现Dictionary<> List<string> list = new List<string>(); //l ...

  5. ASP.Net WebForm温故知新学习笔记:一、aspx与服务器控件探秘

    开篇:毫无疑问,ASP.Net WebForm是微软推出的一个跨时代的Web开发模式,它将WinForm开发模式的快捷便利的优点移植到了Web开发上,我们只要学会三步:拖控件→设属性→绑事件,便可以行 ...

  6. TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端

    目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的使用 框架源码结构 补充说明 源码地址 说明 之前有好几篇博客在讲TCP/UDP通信方 ...

  7. 高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

    偶然间翻出了几年前写的一个小程序,把当时的资料整理整理分享一下. 当时为了给自己的软件实现多国语言功能,而开发的辅助工具:SE String Resource. 这是当时基于自己另一款 IDE 软件抽 ...

  8. 关于分工的思考 (Thoughts on Division of Labor)

    Did you ever have the feeling that adding people doesn't help in software development? Did you ever ...

  9. C# Azure 存储-分布式缓存Redis在session中的配置

    1. 开始 对于分布式的缓存,平常的session的处理是一个用户对应一台分布式的机器,如果这台机器中途挂机或者不能处理这个用户session的情况发生,则此用户的session会丢失,会发生不可预知 ...

  10. Redis学习笔记~目录

    回到占占推荐博客索引 百度百科 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合). ...