博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript学习
阅读量:6280 次
发布时间:2019-06-22

本文共 3725 字,大约阅读时间需要 12 分钟。

Javascript是一种解释型语言,不需要提前编译。通常情况下,JavaScript放在网页中,在浏览器中运行。

1   JavaScript的数据类型

JavaScript的简单数据类型有5种:Number,String,Boolean,Undefined,Null,一种复杂类型Object,一种代码类型Function。

区分undefined 和 null

         Null:

          (1) null 意味着没有值,即缺少数据。

          (2)包含 null 的变量包含“无值”或“无对象”。换句话说,该变量没有保存有效的数、字符串、boolean、数组或对象。可以通过给一个变量赋 null 值来清除变量      的内容。 

          (3) Null类型只有一个值的数据类型,这个特殊的值是null。从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null时会返回"object"的原因(null是一种特殊的object)

     Undefined:

          (1) undefined常量用于尚未初始化的变量或未初始化的动态对象属性的特殊值(未定义的值和定义未赋值的为undefined)

          (2)Undefined类型只有一个值,即特殊的undefined(注意大小写,用的时候也不用加引号,人家不是string)。在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined

 实际上,undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true,但是使用全等运算符(===)对null和undefined进行比较时,比较结果为不相等。

Number:NaN和infinity是两个特殊数,NaN表示一个无法用数值来表示的数字,infinity表示一个无穷大的数字,相对的,-infinity表示负无穷大。

  注意:(1)NaN != NaN 

     (2)infinity/infinity = NaN;

String:字符串,在javascript中没有字符的概念,字符串是表示文本的最小单位。在字符串中,有这样的两个函数,分别是charAt(index)和charCodeAt(index)分别返回对应索引的字符和字符Unicode编码。在我们平时,可能经常会使用下标的方式访问,如s[10],可是这并不是ECMAScript的标准,应该尽量避免。

1.1  Number类型

Number类型用来存储数值,描述64位的浮点类型。

1.2   String类型

String类型用来表示文本,用单引号或双引号来包含文本。任何放在引号内的符号都会被认为是string类型。

1.3   Boolean类型

1.4   Undefined类型

当我们声明一个变量后并没有对其赋值时,他就是undefined。

在javascript中有一个和undefined类似的值:null。Undefined表示“变量已声明但没有赋值”,null表示“变量已赋值但为空”,注意:undefined = = null 的值为true。

Javascript中表达式的优先级:|| 优先级最低,&& 次之,然后是比较运算符,最后是其他(比如!)

typeof 运算符返回一个用来表示表达式的数据类型的字符串。

typeof的运算数未定义,返回的就是 "undefined". 

运算数为数字 typeof(x) = "number" 
字符串 typeof(x) = "string" 
布尔值 typeof(x) = "boolean" 
对象,数组和null typeof(x) = "object" 
函数 typeof(x) = "function" 

1.5   类型转换

类型转化是将一种类型的值转化成另一种类型的值,使用“= =”进行比较时会有类型转化,使用“= = =”(全等于)可以禁止类型转化。我们在上面提到undefined= = null 的值是true,但我们typeof(null)时可以发现结果是object,说明null 是object类型,所以在比较的过程中发生了类型转换。

例:

var a = 1;

       var b = “1”;

       (a = = b) 结果为true

       (a = = = b)结果为false

       (a = = = Number)) 结果为true

2   Javascript基本流程控制

和其他编程语言一样,javascript的逻辑控制也是顺序、循环和条件。

注意:

//这个例子挺好的var myObject ={hisName:"javascript", age:11, belonging:"ECAM"};for(var prop in myObject){      document.write("myObject." + prop + "=" + myObject[prop]+"
");}//输出:// myObject.hisName = javascript//myObject.age = 11//myObject.belonging = ECMA
var myObject ={hisName:"javascript", age:11, belonging:"ECAM"};for(var prop in myObject){     document.write(prop+"
"); } //输出: // javascript //11 //ECMA

3   函数

 

我们会看到页面连续输出两次“Hello World”,说明javascript并非完全按顺序解释执行,而是在解释之前会对javascript进行一次“预编译”,在”预编译“的过程中会把定义式的函数优先执行,也会把所有var 变量创建,默认值为undefined,提高执行效率。上面的一段代码其实被JS引擎预编译为这样的形式:

 

我们可以通过上面的代码很清晰地看到,其实函数也是数据,也是变量,我们也可以对“函数“进行赋值(重赋值)。

3.1   变量的作用域

在javascript中变量可以分为全局变量和局部变量。

在Javascript,全局环境本身就一个对象。在浏览器宿主中这个对象是window,而当Javascript用于其它非浏览器的宿主,如嵌入式的环境中,可能会是其它的对象。

有很多人都认为Javascript只在浏览器中使用,其实Javascript也能在很多非Web情况下使用。

当我们写下:var i=1时,其实就是声明了一个window作用域的一个变量。

      而当我们写下i=1时,是声明了一个window的属性。

函数的作用域问题,每当代码进入一个函数时,JavaScript引擎就会自动创建一个新的作用域,然后把新的作用域作为当前作用域的子作用域,然后把当前的代码作用域切换到新的作用域,当代码退出函数时,这个作用域销毁,把代码作用域交给他的父作用域。  

每个变量找不到自己的定义时,就会沿着作用链向上查找,有可能出现未知的错误,给排错添加了很多的困难,也有可能修改父作用域上变量的值,因此我们在声明变量时应尽量加上var。

3.2   嵌套函数

Javascript允许在函数体内嵌套函数,在某种程度上可以控制一些变量在某些函数内的共享。内嵌函数可以访问外部函数的参数,全局变量等。在调用函数时,通常是不能直接访问内嵌函数的。

3.3   函数调用的机制

Javascript使用栈和上下文机制来调用函数,我们可以将javascript执行的代码的顺序看做是上下文,并且使用栈来存储上下文。

当我们调用一个方法时,在调用前,栈会保存当前上下文,然后调用函数,在调用结束后,栈会从之前保存的上下文开始顺序执行。如果上下文增长过快,会导致堆栈溢出,例如当我们在A方法中调用B方法,然后在B方法中调用A方法,这种循环调用的方式很容易就将堆栈搞坏了。

3.4   函数的可变参数

Javascript在调用函数时,并不会限制传入参数的个数,当传入参数的个数多余定义中的参数的个数时,多余的参数会被忽略;当传入参数的个数小于函数定义中参数的个数时,缺失的参数默认为undefined。

4 eval函数 

一段字符串传递给JS解释器,由javascript解释器将这段字符串解释成javascript代码,并且执行它。

eval()函数动态执行的代码并不会创建新的作用域,其代码就是在当前的作用域执行的。因此也就是说,eval()函数也完全可以使用当前作用域的this,argument等对象。例:

var test = function () {            eval("var i=3");            alert(i);        }        test();        alert(i);

结果是首先弹出3,然后是再提示 i 未定义。

参考: 

转载于:https://www.cnblogs.com/jiandankuaile/p/3501565.html

你可能感兴趣的文章
F5 Networks任命Adam Judd领导亚太区销售工作 将加速区域云和安全业务发展
查看>>
将给企业带来巨大转变的八项“变革式”技术趋势
查看>>
ICML精彩论文:学界与业界联手,通过监测无线信号来判断睡眠阶段
查看>>
欧盟下周或有条件批准微软收购领英
查看>>
指纹识别不安全 美研究人员万能指纹解锁成功率达65%
查看>>
外媒:全球科技进入中美两强时代
查看>>
美国国家安全局在英国运营数据中心从事间谍活动
查看>>
【CVPR 2021主席出炉】谭铁牛、虞晶怡当选,未来4年6位华人主席
查看>>
CRM给企业带来的五大成效
查看>>
继 OpenAI 之后,DeepMind 开源深度学习训练平台 DeepMind Lab
查看>>
雅虎宣布成立研究院取代实验室 两高管离职
查看>>
大数据将如何改变农业
查看>>
《JavaScript和jQuery实战手册(原书第2版)》——第3章为程序添加逻辑和控制
查看>>
Google一年检测出超过76万个恶意网站
查看>>
遵义市 大数据产业汇聚八方人才
查看>>
教会委员会呼吁奥巴马宽恕斯诺登
查看>>
《Android的设计与实现:卷I》——第3章 3.6init循环监听处理事件
查看>>
联发科与高通平分秋色,消费者真不在乎处理器?
查看>>
台湾移动市场电信服务价格竞争预计将放缓
查看>>
《领域特定语言》一2.6 设计优良的DSL从何而来
查看>>