Javascript基础(三)

一.坑爹的Javascript体系
之前我们提过,JS由三部分组成,分别是ECMAScript,DOM 和BOM。前面我们讲JS的数据类型,运算符,对象,变量,函数,执行结构等等都属于ECMAScript中定义的规范,但是DOM是W3C制定的规范,而BOM呢,至今还不是很规范。

二.BOM
之前我们说JavaScript的核心是ECMAScript,不过那只是他的语法核心。
BOM(Browser Object Document)是与浏览器窗口进行交互的对象,
所以JS真正在网页上的核心应该算是BOM.
BOM的结构图:


image.png

由图可见,BOM的顶级父类是window对象。但是window对象很有趣,
它既是通过javascript访问浏览器窗口的一个接口,又是ECMAScript规定的全局对象。

window对象表示浏览器的一个实例,代表当前窗口。
因为他是一个顶级对象,所以定义在全局作用域中的变量、函数都会变成window对象的属性和方法,在调用的时候可以省略window。 比如 document对象事实上就是window.document, alert()函数就是window.alert();

window对象有几个常用的属性和方法:
1.定时器(2种):setTimeout(),setInterval()
setTimeout() 表示在指定的毫秒数后调用函数或计算表达式;
setInterval()表示在每隔指定的毫秒数循环调用函数或表达式,直到clearInterval把它清除。

关于这2个方法的区别,看这里:http://blog.csdn.net/lijiajun_blog/article/details/53495543

一般浏览器都有这几个线程:
JS引擎线程(用于处理JS)
GUI渲染线程(用于页面渲染)
事件触发线程(用于控制交互)
HTTP请求线程(用于处理http请求)


image.png

其中,JS引擎线程与GUI渲染线程是互斥的,原因是JS引擎线程可以操作DOM,会影响GUI页面渲染。也就是说当JS引擎线程处于运行状态时,GUI渲染线程将处于挂起状态。

而JS引擎线程是基于事件驱动的,采用的是单线程运行机制。即JS引擎会按顺序的从任务列表中执行,然后唤醒池中的异步队列。

在HTML5 中提出了工作线程(Web Worker)的概念,可以在JS主线程中定义工作线程,给工作线程发送消息让其开始工作。还有什么回调函数之类的。

如果页面是由框架页组成的,那么各自的框架页都算一个window对象,并且保存在frames集合中。在frames集合中,可以通过数值索引(从0开始,从左到右,从上到下)或者框架名称来访问相应的window对象(例如window.frames[0])。每个window对象都有一个name属性,包含着框架页的名称。
top对象始终指向最外层的框架对象
parent对象始终指向当前window对象的父window对象
self对象始终指向window本身,self和window对象可以互换使用

2.location对象
location对象是window对象下的一个子对象,它表示载入窗口的URL。它既是window对象的属性,也是document对象的属性。window.location和document.location引用的是同一个对象。
常用属性与方法:
location.herf="www.baidu.com";//页面跳转到百度
location.reload(true); //从服务器重载当前页面
location.reload(false); //从浏览器缓存中重载当前页面
location.reload(); //从浏览器缓存中重载当前页面

3.history对象,navigator对象,screen对象
这3个都是window对象的子对象,不过都较少使用,navigator对象包含有关浏览器的信息,screen包含浏览器屏幕的信息
常用方法有:
history.go(-1); //后退一页
history.go(1);//前进一页
height: 获取整个屏幕的高。
screen.width : 获取整个屏幕的宽。
screen.availHeight: 整个屏幕的高减去系统部件的高
screen.availWidth : 整个屏幕的宽减去系统部件的宽

4.document对象
他是window对象的一个子对象,用来操作文档节点层次关系,我们一般用jQuery操作会比较多。

常见原生JS操作DOM


image.png

常见jQuery操作DOM


image.png

三.JS中的内置对象:这里说的内置对象是ES标准中的
1.Array,String,Map,Set(ES6新增):这些前面已经说过了。

2.Math对象(数学有关的):常用方法有:
Math.pow(n,m) n的m次方。
Math.abs(n) n到原点的距离(n的绝对值)。
Math.round(n) 四舍五入取整。
Math.floor(n) 地板函数(向下取整)。
Math.ceil(n) 天花板函数 (向上取整)。
Math.random() 返回0-1的随机数(取不到1)。

3.Date对象:日期有关,常用方法:
var date = new Date();
date.toLocaleString() 以当前本地格式显示时间。
date.getFullYear() 获取date对象的年份。
date.getMonth() 获取月份(0-11)对应1-12月。注意:月份从0开始
date.getDate() 获取日期。
date.getHours() 获取小时。
date.getMinutes() 获取分钟
date.getSeconds() 获取多少秒
date.getMilliSeconds() 毫秒数
date.getDay() 获取星期几(0-6) 对应 周天至周六。
date.getTime() 从1970年开始到时间日期的毫秒值(时间戳)
date.setFullYear 设置年份

4.RegExp(正则表达式)
创建正则表达式的2种方法:推荐用第1种
var re1 = /ABC-001/;
var re2 = new RegExp('ABC\-001');

re1; // /ABC-001/
re2; // /ABC-001/
其他的什么略过。。。

5.JSON(JavaScript Object Notation):
玩js不会JSON就相当于玩java不会面向对象。它是JS的一个子集,也就是说它的什么数据类型和JS是一样的。

JSON对象和JSON字符串的区别:

var jsonStr ='{"name":"Liza", "password":"123"}'; //JSON字符串
var jsonStr ={"name":"Liza", "password":"123"}; //JSON对象

//JSON数组
var packJson = [{"name":"Liza", "password":"123"}, {"name":"Mike", "password":"456"}];

常用方法:
1>把JS对象序列化成一个JSON格式的字符串:JSON.stringify(obj);
'use strict';
var xiaoming = {
name: '小明',
age: 14,
gender: true,
height: 1.65,
grade: null,
'middle-school': '"W3C" Middle School',
skills: ['JavaScript', 'Java', 'Python', 'Lisp']
};
var s = JSON.stringify(xiaoming); //{"name":"小明","age":14,"gender":true,"height":1.65,"grade":null,"middle-school":""W3C" Middle School","skills":["JavaScript","Java","Python","Lisp"]}

2>把JSON字符串反序列化为JS对象:JSON.parse()
JSON.parse('[1,2,3,true]'); // [1, 2, 3, true]
JSON.parse('{"name":"小明","age":14}'); // Object {name: '小明', age: 14}
JSON.parse('true'); // true
JSON.parse('123.45'); // 123.45

基础部分差不多了。。。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 第一章: JS简介 从当初简单的语言,变成了现在能够处理复杂计算和交互,拥有闭包、匿名函数, 甚至元编程等...
    LaBaby_阅读 1,636评论 0 6
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • 转载请声明出处 博客原文 随手翻阅以前的学习笔记,顺便整理一下放在这里,方便自己复习,也希望你有也有帮助吧 第一课...
    程序员poetry阅读 12,638评论 13 94
  • 这个小demo是之前项目中使用的一个需求,单独拿出来,效果还不错。主要是利用tableView自带刷新效果和scr...
    天明天阅读 4,668评论 0 4
  • 介绍 可选链,英文叫Optional Chaining,是表示变量、属性等值可为空,也就是值可能为nil。若有值,...
    透支未来阅读 539评论 0 0