《JavaScript权威指南》学习笔记 第二天 下好一盘大棋

     前段学习js的时候总是零零散散的,以至于很多东西都模棱两可。时间稍微一久,就容易忘记。最主要的原因是这些东西,原来学的时候就不是太懂,以至于和其他知识无法形成记忆链,所以孤零零的知识特别容易忘记。重温犀牛书,加上最近对记忆宫殿的记忆方法有点感兴趣,于是结合起来来做笔记。


 

开始吧,上去先扔一张我画的js的数据类型。后面的所有东西,基本上都是基于这张图的。

 

 

原始类型没啥说的,就是string,number ,boolean 。

      对象类型包括 对象。其实还有Array, func 也是特殊的对象。  对象其实就是一个键值对,在php里面叫关联数组。值可以是原始类型即string, boolean、number,当然也可以还是一个对象。

      这里面有两个特殊的东西,叫null和undefined。null在各种语言里都比较常见。在js里面null == undefined。这两个特殊的东西,叫做特殊的原始值,因为其数据类型就是其值,其值不能被修改(不可变 immutable).null和undefined的区别在哪里呢?区别在于null常表示我们程序级别的,正常的空值。如变量没有赋值的时候,到了浏览器语法检查的时候,会在该变量作用域的顶部声明该变量,这个时候给这个变量赋的值就是null.但是当该变量不存在的时候,下面却调用了,就会报undefined,因此可以认为undefined是系统级别的,类似于语法错误。 

      有对象就有类,对象是实例化的类。js的对象是一个大对象,当create一个页面的时候,就会被js构造器(construct)创造出来 数组对象(Array)、函数对象(function)、日期对象(date)、正则对象(RegExp)以及错误对象(Error).这点稍后会详细的讲下。

      上面是从从数据类型维度来区分js的值的。数据类型是后面的基础,从是否拥有方法又可以区分,可以拥有方法的类型,不拥有方法的类型。可变的类型,与不可改变的类型、

从拥有方法来讲,其实原始类型是不拥有方法的,但是js的特殊性却让原始类型也拥有了方法。比如toString()的方法。这些不拥有方法的类型在调用方法的时候,会先变成包装对象(一个调用后立即销毁的对象),所以原始类型也是拥有方法的类型。但是特殊的类型 null 与 undefined 不拥有方法,因为其值不允许被改变,有方法有个毛用啊。

     从值可变与不可变的角度来说。原始类型的值是不能被改变的。平时在使用的过程中,确实发现其值改变了,那是因为我们将改变后的值赋给了新的变量。其原变量本身是没有变化的。字符串是由字符组成的数组,这点和C语言一样,比较好理解。

 

直接量:

什么叫直接量,就是简单直接粗暴的赋值。类似 var a = 3;   

直接量,直接赋值。区别于调用new String()  new Number() 来产生的变量。使用直接量,程序没有执行的时候,并不知道值得类型,等到语法解析编译的时候,才会根据其具体的值,指定变量类型。因此这样的方式声明的变量就叫做直接量。

 

全局对象

浏览器启动,create一个新的页面。js的全局对象已经被创造好了。也就是一个大对象生下了一堆小对象。对于大对象来说,这是一堆小对象,但是对于我们来说。他们仍是一个对象类,我们需要去实例化。

大对象生出了一堆东西:

全局属性: undefined、Infinity、Nan

全局函数:isNaN()  、parseInt() 、eval()

构造函数:(我更喜欢称为构造类)Date() 、RegExp()、String() 、Object() 、Array(). 之所以称为是构造函数,是因为我们也可以直接把他们当做函数使用,在原始类型变成对象的时候,也充当包装对象。

全局对象: Math() 、JSON。

 

包装对象

这个名字起的比较好。假设原始类型string 、number 、boolean 分别是烤鸡、烤鸭、烤兔。当他们变成商品(对象)去卖的时候、就会包上一层包装纸,锡箔纸、包装袋。但是这个包装纸的作用是有限的,当其完成其固有的作用的时候,就会被丢弃(包装对象被销毁)。

所谓的包装对象就是用完就丢弃,就像物品的包装袋一样。

 

类型转换:

这个分为原始类型之间的转换、对象之间的转换、原始类型转为对象、对象转为原始类型三部分。

原始类型之间互转主要通过内隐的方法进行自动转换,也可以调用系统的构造函数。

原始类型变对象,通过包装对象。

对象变原始类型。主要是变成字符串和数字两种。 通过调用对象内的一个魔术方法。这个原理和php里面的将变量变成当成字符串输出的原理是一样的。

 

变量作用域与作用域

这种东西,画个图什么的,就清晰多了。

 

A的变量作用域在A - E,B的变量作用域在B-E,以此类推E的变量作用域在E。

但是E想使用A的一个变量怎么办,js不像人一样聪明,直接去D拿,况且js也不知道变量在哪。E先问D有没有,D要没有了,再问C,C没有了问B,最后一直问到A。如果A也没有咋办,E发现自己上当受骗了,于是跑到顶层全局对象Error() 那里告状,然后在页面上引发一个ReferenceError(叫你不给我,哼!)的错误。这点很像冒泡,也许冒泡就是从这里面来的吧。

这就是JS的作用域链。


 

天寒,晚安。

 

转载于:https://www.cnblogs.com/roverliang/p/4979538.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375348.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SUID或SGID程序中能不能用system函数

system()函数的声明和说明如下: 注意它的描述那里,system()执行一个由command参数定义的命令,通过调用/bin/sh -c命令来实现这个功能。也就是说它的逻辑是这样的! 进程调用system函数,system函数调用fork创建一个子进程…

Xamarin iOS编写第一个应用程序创建工程

Xamarin iOS编写第一个应用程序创建工程 在Xcode以及Xamarin安装好后,就可以在Xamarin Studio中编写程序了。本节将主要讲解在Xamarin Studio中如何进行工程的创建以及编写代码等内容XamariniOS编写第一个应用程序创建工程本文选自Xamarin iOS开发实战大学霸。 1.3.…

Birt使用总结

把report放到其他服务器要重新建立Data Source ,这是配置&#xff0c;拷贝项目时不会同时拷贝 (1)在EXTJs中利用Report实现报表的刷新 Ext.getCmp("showview").body.update("<iframe idshowviewframe src" "> </iframe>"…

【线性代数公开课MIT Linear Algebra】 第二十三课 微分方程与exp(At)

本系列笔记为方便日后自己查阅而写&#xff0c;更多的是个人见解&#xff0c;也算一种学习的复习与总结&#xff0c;望善始善终吧~ 一阶常系数微分方程 Aududt 将一阶常系数微分方程转换为线性代数问题的关键在于常系数微分方程的解一定是指数形式的。那么我们的需要求解的东西…

iOS学习之基本概念

学习iOS最重要的是态度和兴趣&#xff0c;如果你对于学习始终抱有不断的热情和端正的态度&#xff0c;那么&#xff0c;无论是什么&#xff0c;你总会成功的&#xff01; 有一句话与大家共勉&#xff1a;过程中跌倒多少次都没有关系&#xff0c;重要的是&#xff0c;跌倒后你能…

【转】gvim配置及相关插件安装

0.准备软件及插件。(a)gvim72.exe 地址ftp://ftp.vim.org/pub/vim/pc/gvim72.exe。(b)vimcdoc-1.7.0-setup.exe 地址http://prdownloads.sourceforge.net/vimcdoc/vimcdoc-1.7.0-setup.exe?download(c)ec57w32.zip 地址http://prdownloads.sourceforge.net/ctags/ec57w32.zip(…

Android 高级编程 RecyclerView 控件的使用

RecyclerView 是Android 新添加的一个用来取代ListView的控件&#xff0c;它的灵活性与可替代性比listview更好。 看一下继承关系&#xff1a; ava.lang.Object ↳android.view.View ↳android.view.ViewGroup ↳android.support.v7.widget.RecyclerViewKnown Direct …

jquery判断一个div的边界是否超出另外一个div的边界

摘要&#xff1a;本文简单介绍jquery判断一个div的边界是否超出另外一个div的边界&#xff0c;如果超出边界做出相应的处理。 1、实现效果 判断前 判断后 2、实现思路 实现类似的判断&#xff0c;主要是获取两个div在浏览器中的上下左右的四至&#xff0c;在jquery中&#xff0…

maven环境快速搭建(转)

最近&#xff0c;开发中要用到maven&#xff0c;所以对maven进行了简单的学习。因为有个maven高手在身边&#xff0c;所以&#xff0c;很快就上手了&#xff0c;我这里算是自我总结吧。关于maven是什么东东&#xff0c;请参考其它文章。 ----------------准备工作-------------…

cocos2d-x3.0 相对布局(一)

2dx相对布局和Android非常类似。假设前完成Android它应该是easy入门。Size widgetSize Director::getInstance()->getWinSize();Text* alert Text::create("Layout", "fonts/Marker Felt.ttf", 30 );alert->setColor(Color3B(159, 168, 176));aler…

夺命雷公狗---ECSHOP---08---商品页的拇改成星星

<strong>用户评价&#xff1a;</strong>{*---------商品评价星星开始----------*}<img src"./images/stars{$goods.comment_rank}.gif" alt"comment rank {$goods.comment_rank}">{*---------商品评价星星结束-------*} 这里主要是要有星…

文件指针

一.移动文件指针 SetFilePointer,hFile,lDistanceToMove,lpDistanceToMoveHigh,dwMoveMethod dwMoveMethod 指明移动的模式 FILE_BEGIN 不管文件处于什么地方,总是从文件的头部开始移动,这时的位置参数相当于指定了一个绝对位置 FILE_CURRENT 从当前的文件指针处开始移…

见证下的自我变化-2014全年总结

又是一年总结季&#xff0c;回过头看看看自己的成长&#xff0c;心里真的是满满的喜悦之情…… 一年前自己的总结博客&#xff1a;http://blog.csdn.net/huo065000/article/details/19632603 半年前自己的总结博客&#xff1a;http://blog.csdn.net/huo065000/article/details/…

【Linux学习篇】This virtual machine is configured for 64-bit guest operating systems.……

在学习Linux的基本操作的时候&#xff0c;安装虚拟环境则提示自己 This virtualmachine is configured for 64-bit guest operatingsystems.……起初由于各种拒绝的心理&#xff0c;所以屏蔽了这个错误&#xff0c;但是屏蔽永远也解决不了问题的&#xff0c;所以自己则尝试百度…

图解SSIS监视文件夹并自动导入数据

图解SSIS监视文件夹并自动导入数据 原文:图解SSIS监视文件夹并自动导入数据 演示案例&#xff1a;让系统自动监视文件夹&#xff0c;并把文件夹下面的excel文件导入到sql中&#xff0c;之后清空目录。这个过程以往都需要写程序来实现或者定时执行&#xff0c;现在可以用ssis来订…

WP8手机解锁时提示“请确保IPOVERUSBSVC服务正常运行”解决方法

如果你各种重启服务 卸载手机 重装驱动都试过了还不行&#xff0c;请看看你是否安装了Hyper-v或Vitualbox虚拟机&#xff0c;很有可能是虚拟交换机造成的。 我在网络连接属性里看到这个 把它卸载后&#xff0c;解锁成功。 解锁后记得重新安装卸载的那个网络服务转载于:https://…

浮点数的存储

-------------------------------------------------------------------------------- 在VC6.0----float环境一共32位 其中第一位是符号位 第二到第9位中间8位为小数点位置&#xff08;指数以127的二进制为原点向下为负指数 向上为正指数&#xff09;后面23位为数据位。 S EE…

一款基于css3鼠标经过圆形旋转特效

今天给大家分享一款基于css3鼠标经过圆形旋转特效。当鼠标经过的时候图片边框颜色旋转&#xff0c;图片显示详情。该实例适用浏览器&#xff1a;IE8、360、FireFox、Chrome、Safari、Opera、傲游、搜狗、世界之窗。效果图如下&#xff1a; 在线预览 源码下载 实现的代码。 ht…

Eclipse生成jar包

前言: 本宅因为要写XXX软件的一个插件,来用用java,接触3天后 在打jar包上卡住了..... 经过大量的百度搜索后有如下几种解决方案: 解决方案: 一.安装Fatjar 在线安装地址:http://kurucz-grafika.de/fatjar 悲剧的是我怎么也安装不上去,于是放弃(在线下载包什么 我的Eclipse版…

Buffer和Cache的区别

现在不都是只有page cache了吗&#xff1f; buffer pages其实也是page cache里面的页。只是多了一层抽象&#xff0c;通过buffer_head来进行一些访问管理对,从Linux算法实现的角度&#xff0c;page cache和buffer cache目前是一样的&#xff0c;但是从功能抽象和具体应用来讲&a…