JavaScript知识总结--历史-html引用方式-基础概念
一、JavaScript简介
1、ECMAScript
1995~今已经20年的历史,产生JavaScript是需要它去解决一定的问题:在浏览器端做一些数据的验证,试想当年的网络环境,如果能够在浏览器端做数据验证能够方便很多。如今的JavaScript拥有了闭包、匿名函数、甚至元编程的能力。一门能够解决棘手问题的新语言的诞生必定有很广阔的市场,有市场就会有竞争,竞争逐渐演化为标准也就是ECMAScript、它定义了一门脚本语言的标准,在此基础上加入DOM,BOM的支持构成了如今的JavaScript。
2、 DOM(Document Object Model)
DOM是一个编程接口,操作的对象是基于XML的HTML(HTML元素的容器)结构。
DOM将一个HTML文件表示成一个分层树形图,借助DOM提供的API,开发人员可以很方便的增、删、改、查HTML文件节点
DOM由两部分构成:DOM Core和DOM HTML 前者用于描述HTML结构,后者用于提供一些操作,是不是很符合数据结构+算法的思想。
3、 BOM(Browser Object Model)
BOM是一个描述浏览器窗口的对象模型。比如窗口大小,分辨率,location,这些都是属于浏览器窗口的信息,跟DOM没有关系,同时也提供了和浏览器交互的方法和接口。
二、在HTML中使用JavaScript
在HTML代码中使用<script></script>标签将JavaScript代码嵌入HTML文件中,包含在这个标签里的JavaScript代码从上到下依次解释。
可以通过这个标签的src属性链接外部的JavaScript文件,也可以在这个标签中间直接写JavaScript代码。不能够在一个script标签中即使用src属性链接外部文件又使用内嵌的方式写入JavaScript代码,如果这样写内嵌的代码将被忽略。
三、基本概念
1、 严格模式:为JavaScript定义了一种不同的解析和执行模型,在严格模式下ECMAScript3中一些不确定的行为将得到处理,而且某些不安全的操作也会跑出错误。要在脚本中启用严格模式,可以在顶部添加如下代码
“use strict”;
2、 变量
每个变量仅仅是一个用于保存值的占位符而已 :var xxxx;//(xxxx是变量名),
注意:
①、此处仅仅是定义了变量xxxx单未给变量初始化,此时xxxx会保存一个特殊的值:undefined
②、使用var操作符定义的变量将成为定义该变量作用域中的局部变量,这是相对于全局变量来讲的,如果不适用var而直接给一个未声明过的变量赋值,那么当这个变量定义语句执行过后这个变量将成为全局变量。未经声明的变量赋值在严格模式下会导致抛出ReferenceError错误。
3、 数据类型
① ECMAScript定义了5中简单的数据类型(基本数据类型)
a) Undefined
非常神奇的一种数据类型,其他语言中没见过,这种类型只有一个值即:undefined。如上所述在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。
b) Null
这也是一个非常神奇的类型,只有一个值null,标识一个空对象的指针。一般如果定义的变量是要用来保存对象的,那么最好在初始化的时候将它初始化为null值,这样一来在以后用到该变量的时候只需要直接检查该变量是否为null值就可以知道相应的变量是否已经保存了一个对象的引用。
Var car=null;
Alert(Type of car) //Object;
……;
If(car != null){
//对car对象执行某些操作
}
又一枚神奇的定义:undefined派生自null
Alert(null == undefined); //true
c) Boolean
只有两个值true、false;
所有类型的值都有与这两个值等价的值,可以使用Boolean(变量名)来转换。
d) Number
NaN值,Not a Number
任何数除0都会返回NaN,NaN与任何值都不相等包括NaN本身
e) String
② 1中复杂的数据类型
Object,本质上是由一组无序的名值对组成
创建自定义对象的方式是创建Object类型的实例并为其添加属性和方法。基本类型不具有这个特性。
Var person = new Object();//定义一个person对象
Person.name=’helloworl~~~’;//为person对象添加一个name属性
Alert(person.name);// helloworl~~~
不支持任何创建自定义类型的机制,所有值最终都将是上述6种数据类型之一。 通过typeof操作符可以识别变量的类型,函数在ECMAScript中是对象,不是一种数据类型,然而函数有一些特殊的属性,因此通过typeof操作符来区分函数和其他对象是有必要的。
4、 函数
① 、无须制定函数的返回值,因为任何ECMAScript函数都可以在任何时候返回任何值。
② 实际上、未指定返回值的函数返回的是一个特殊的undefined值。
③ ECMAScript中也没有函数签名的概念,因为其函数参数是以一个包含零活多个值得数组的形式传递的。
④ 可以向ECMAScript函数传递任意数量的参数,并且可以通过arguments对象来访问这些参数。
⑤ 由于不存在函数签名的特性,ECMAScript函数不能重载。
5、 变量的类型检测
① 、Typeof 操作符,注意这是一个一元操作符,它用来检测变量的类型
Var a=true;
Var b;
Var c=null;
Var d = new Object();
Alert(typeof a);// 输出:boolean
Alert(typeof b);// 输出:undefined
Alert(typeof c);// 输出:object
Alert(typeof d);// 输出:object
② Instanceof 操作符,是一个二元操作符,测试一个对象是不是另一个对象的实例,返回ture false。
Alert(person instanceof Object);//变量person是Object吗?
Alert(colors instanceof Array);//变量colors是Array吗?
Alert(pattern instanceof RegExp);//变量pattern是RegExp吗?
在检测基本数据类型时typeof很好用,但是在检测引用类型的变量时,这个操作符的用处不大,因为它只会返回object或function。通常我们并不想知道某个值时对象,而是想知道它是什么类型的对象,这个时候用instanceof操作符就可以实现此目的。
6、 作用域
JavaScript中没有块级作用域,因而支持根据条件来定义变量。在其他类C的语言中,由花括号封闭的代码都有自己的作用域。
If(true){
Var color=’blue’;
}
Alert(color); //’blue’
7、 垃圾收集
JavaScript具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中使用的内存。垃圾收集机制的原理简单的讲就是找出那些不在继续使用的变量,然后释放其所占用的内存。一般都是周期性的执行这一操作,当然也可以主动调用。
找程序中的无用变量的策略可能会因为实现而异,通常有如下两个策略:
①、 标记清除:当变量进入环境时,就将这个变量标记为“进入环境”。从逻辑上将,永远不能释放进入环境的变量所占用的内存,因为只要执行流进入相应的环境,就可能用到他们。而当变量离开环境时,则将其标记为“离开环境”。垃圾收集器完成清除离开环境的对象内存的工作。
②、 引用计数(不太常见):跟踪每个值被引用的次数,当声明了一个变量并将一个引用类型的值赋给该变量时,则这个值得引用次数就是1,如果同一个值又被赋给另一个变量,则该值得引用次数加1.相反,如果包含对这个值引用的变量又取得另外一个值,则这个值得引用次数减1,当这个值得引用次数变成0时,则说明没有办法再访问这个值了,因而就可以将其占用的内存空间回收回来。
优化内存占用的最佳方式,就是为执行中的代码只保存必要的数据,一旦数据不在有用,最好通过将其值设置为null来释放其引用。这个做法叫做解除引用。这一做法使用于大多数全局变量和全局对象的属性。局部变量会在他们离开执行环境时自动被解除引用。注意:解除一个值得引用并不意味着自动回收该值所占用的内存。解除引用的真正作用是让值脱离执行环境,以便垃圾收集器下次运行时将其回收。
本文系个人读书总结,转载请注明出处
JavaScript知识总结--历史-html引用方式-基础概念的更多相关文章
- delphi的一些语法知识 以及参数传递问题,按引用方式传递参数,按值方式传递参数
//delphi中exit,abort,break,continue 的区别 exit: 退出函数体abort: 遇到异常,安静处理,就是不显示不提示break: 退出当前循环体,包括for ,whi ...
- 《jQuery风暴》第2章 必须知道的JavaScript知识
第2章 必须知道的JavaScript知识 JavaScript是jQuery应用的基础,掌握JavaScript这门语言是使用jQuery的基础条件.本章不会全面细致的讲解JavaScript的全部 ...
- [原创]Javascript模拟“类”的综合实现方式以及部分细节【截至ES6】
[原创]Javascript模拟“类”的综合实现方式以及部分细节[截至ES6] 前言 最近几个旧项目里使用的图片编辑插件出现Bug, 经Review 后确定需要在其内外均做些改动,但是头疼的发现部 ...
- 还原JavaScript的真实历史~
问题 ============ JavaScript真的继承自Cmm吗? JavaScript与Java有多少关系? JavaScirpt最初的设计是怎样的?在许多资料,JavaScript的语源被追 ...
- 今天才知道的JavaScript的真实历史~[转]
JavaScript真的继承自Cmm吗?JavaScript与Java有多少关系?JavaScirpt最初的设计是怎样的?这个文章是从一个叫编程人生的网站上看到的.不知道出处在哪.在许多资料,Java ...
- Lodash 严重安全漏洞背后 你不得不知道的 JavaScript 知识
摘要: 详解原型污染. 原文:Lodash 严重安全漏洞背后 你不得不知道的 JavaScript 知识 作者:Lucas HC Fundebug经授权转载,版权归原作者所有. 可能有信息敏感的同学已 ...
- 【原文】前端程序员必须知道的高性能Javascript知识
原文:前端程序员必须知道的高性能Javascript知识 想必大家都知道,JavaScrip是全栈开发语言,浏览器,手机,服务器端都可以看到JS的身影. 本文会分享一些高效的JavaScript的最佳 ...
- 什么是JavaScript闭包终极全解之一——基础概念
本文转自:http://www.cnblogs.com/richaaaard/p/4755021.html 什么是JavaScript闭包终极全解之一——基础概念 “闭包是JavaScript的一大谜 ...
- [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型
引言: 前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解 ...
随机推荐
- 压力测试工具ab及centos下单独安装方法
压力测试工具Ab简介 Apache安装包中自带的压力测试工具 Apache Benchmark(简称ab) 简单易用,这里就采用 ab作为压力测试工具了. 1.独立安装 ab运行需要依赖apr-uti ...
- LOJ2360. 「NOIP2016」换教室【概率DP】【Floyed】【傻逼题】
LINK 思路 先floyed出两点最短路 然后就可以直接\(dp_{i,j,0/1}\)表示前i节课选择换j节,换不换当前这一节的最小贡献 直接可以枚举上一次决策的状态计算概率进行统计就可以了 我变 ...
- BZOJ3444 最后的晚餐【细节题+组合数学】*
BZOJ3444 最后的晚餐 Description [问题背景] 高三的学长们就要离开学校,各奔东西了.某班n人在举行最后的离别晚餐时,饭店老板觉得十分纠结.因为有m名学生偷偷找他,要求和自己暗恋的 ...
- ASP.NET Core 中的SEO优化(3):自定义路由匹配和生成
前言 前两篇文章主要总结了CMS系统两个技术点在ASP.NET Core中的应用: <ASP.NET Core 中的SEO优化(1):中间件实现服务端静态化缓存> <ASP.NET ...
- python redis的基本使用
1.redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sor ...
- .NET类库
1.如何让发布的C#的DLL类库中的方法带有注释说明 一个类库让第三方引用时,默认情况下生成类库时不携带注释,所以别人引用这个类库时就不是很方便理解类方法的作用和每个参数的含义,若是能携带方法的说明注 ...
- uuid 了解
什么是UUID? UUID是Universally Unique Identifier的缩写,它是在一定的范围内(从特定的名字空间到全球)唯一的机器生成的标识符.UUID具有以下涵义: 经由一定的算法 ...
- 安装 Ruby, Rails 运行环境
步骤1 - 安装 RVM RVM 是干什么的这里就不解释了,后面你将会慢慢搞明白. $ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1 ...
- Cluster的日记体系
Cluster的日志体系 Cluster的日志体系: Oracle cluster不像数据库那样,具有丰富的视图.工具可以用来辅助诊断,他的日志和trace文件时唯一的选择.但不想oracle只有al ...
- 什么是spark(一) 分区以及和MR的区别
什么是spark,是一个分布式计算平台,或者说是分布式计算引擎,他的职责就是将指定的数据读入到各个node的内存中,然后计算.所以spark是具有泛化性质的,只要数据源是可读入的,读到内存里面之后,处 ...