javascript产生的原因:

在拨号上网时代,表单数据必须发送到服务器端才能验证输入值得有效性,JavaScript的研发就是为了解决这个问题,以便在客户端就验证输入值的有效性。

ECMAScript/JavaScript:

JavaScript是Netscape公司于1995年发布的脚本语言,ECMAScript是欧洲计算机制造商协会定义的一种通用、跨平台、供应商中立的脚本语言的语法和语义。

一个完整的JavaScript实现包含:

  1. 核心(ECMAScript):由ECMA-262定义,提供核心语言功能;

  2. 文档对象模型(DOM):原本针对XML,但经过扩展针对HTML的API。

  3. 浏览器对象模型(BOM):提供与浏览器交互的方法和接口;

加快页面加载的两个合理方法:

  1. 将JS的<script>标签放在页面底部。

  2. 在<script>标签中加上async属性。

Number类型:

数值转换共有三个函数:Number(), parseInt(), 和 parseFloat()。

Number()转换规则:

  • 布尔值转换为0和1.

  • 数字只是简单传入和返回

  • null值返回0

  • undefined,返回NaN

  • 如果是整数、浮点数、十六进制,都会转换成十进制后相应的数,忽略前导0。

  • 空字符串转换为0,其他的为NaN

  • 如果是一个对象,先调用valueof()方法,依据前面的规则转换,如果是NaN,再调用toString()方法,再按前面的规则转换。

parseInt()转换规则:

忽略字符串前面的空格,直到前面找到第一个非空格字符。如果不是数字字符或负号,则会返回NaN。直到解析到第一个非数字位置。最好为该函数提供第二个参数,转换时使用的基数。

parseFloat()转换规则:

只解析十进制,十六进制等会被返回0。且只解析一个小数点。

String类型:

toString()方法:

1.适用数值类型:数值、布尔值、对象和字符串。

2.对于数值类型可以传递一个参数,作为转换的基数。

string()方法:

1.可以转换任何类型,null和undefined返回本身。

操作符:

1.一元操作符

  • 前置递增递减操作符会在语句被求值以前改变变量的值。

  • 后置递增递减操作符是在语句被求值以后改变变量的值。

2.位操作符

  • ~按位非(NOT)返回数值的补码。

  • &按位与(AND),将数值转换为2进制,每一位对齐,两个对应位都是1时返回1,否则返回0.

  • |按位或(OR),有一个位是1就返回1.

  • ^按位异或(XOR),只有一个位为1是才返回1,否则返回0

  • <<左移,将数值的所有位向左移动指定的位数,左移不影响符号位

  • >>有符号右移,将数值向右移动,左边以符号位来填充所有的空位

  • >>>无符号右移,正数不影响,但是负数左边以0填充,会使其值非常大

3.布尔操作符

  • 逻辑与和逻辑或是短路操作符,只要第一个操作符的求值结果为true,就不会对第二个进行求值。

4.条件操作符

variable = boolean_expression ? true_value : false_value;

语句:

1.do-while语句:一种后测试循环语句,最常用于循环体中的代码至少要被执行一次。

2.while:前测试循环语句。

3.for:前测试循环语句

4.for-in:精准的迭代语句,用来枚举对象的属性。

5.switch语句:

 switch(expression){
case value:statement
break;
default:statement;
}

6.函数:函数的return 语句可以有返回值,也可以没有,没有返回值的意思是希望提前停止函数执行而且不需要返回值。

7.函数:js不介意传多少参数,也有不介意类型,函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。命名参数只是提供便利,但不是必须的。

8.js没有重载,两个名字相同的函数,该名字只属于后定义的函数。

基本类型和引用类型的值:

1.基本类型是指简单的数据段,也就是5种基本数据类型。这5种基本数据类型是按值访问的,可以操作保存在变量中的实际值。

2.引用类型指的是那些可能有多个值构成的对象。操作对象时,实际上是在操作其引用,引用类型的值是按照引用访问的。引用类型的值可以动态地添加属性。

复制变量值:

1.复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上,此后这两个变量可以参与任何操作而不会相互受影响。

2.对于引用类型的复制,会将储存在变量对象中的值复制一份放到为新变量分配的空间中。但这两个副本实际上是同一个指针,复制结束后,两个变量实际上将引用同一个对象,因此改变其中一个变量,就会影响另一个变量。

传递参数:

ECMAScript中的所有函数的参数都是按值传递的。基本类型值得传递如同基本类型变量的复制一样,而引用类型的传递,就如同引用变量的复制一样。(即使在对象内部修改参数值,但原始的引用还是不变)。

检测类型:

1.typyof 操作符确定一个变量是字符串、数值、布尔值、还是undefined的最佳工具。

2.instanceof 操作符可以判断一个对象是什么类的对象。

延长作用域链:

1.try-catch语句的catch块,会创建一个新的变量对象,其中包含的是被抛出的错误对象声明。

2.with语句,会将指定的对象添加到作用域链中。

function buildUrl(){
var qs = "?debug=true";
with(location){ //location对象中包含所有的属性和方法
var url = href + qs; //实际引用的是location.href
}
return url; //url是函数执行环境的一部分
}

没有块级作用域:

1.在js中,if语句中的变量声明会将变量添加到当前执行环境中。

 if(true){
var color = "blue";
} alert(color); //"blue",一般在C/C++/Java中,color会在if语句执行完毕之后被销毁。
在编写JS代码时,如果不声明而直接初始化变量,会使其变成全局变量。

JS高级程序设计学习笔记1的更多相关文章

  1. JS高级程序设计学习笔记之第三章基本概念(语法,数据类型,流控制语句,函数)——查漏补缺

    一.语法: 区分大小写; 2.标识符:就是指变量.函数.属性的名字,或者函数的参数 a.标志符的规则:①第一个字符必须是一个字母.下划线(_)或一个美元符号($).                   ...

  2. JS高级程序设计学习笔记——继承

    我们知道,在OO语言中,继承可分为接口继承和实现继承.而ECMAScript的函数没有签名,不能实现“接口继承”,只能通过原型链实现“实现继承”. 在学习了各种继承模式之后,简单总结一下各种继承模式的 ...

  3. JS高级程序设计学习笔记之基本包装类型

    概述 基本类型:string.boolean.number 每当读取一个基本类型的值的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据. 使用new操作符创建的 ...

  4. JS高级程序设计学习笔记之RegExp类型

    创建正则表达式: 字面量形式定义正则表达式: Var expression = / pattern /flags ;pattern部分可以使任意简单或复杂的正则表达式.每个正则表达式可以带有一个或多个 ...

  5. JS高级程序设计学习笔记之Date类型

    日期对象的创建:var now =new Date(),不传递参数时,对象自动获取当前时间.(若要创建特定日期与时间的对象,必须传入该日期距离1970/1/1零点的毫秒数). Date.parse() ...

  6. JS高级程序设计学习笔记之数组

    数组创建的方式 var str = new Array();放入数字即为设置数组长度 var str = []; 数组的length可读可写 监测数组 Array.isArray()方法确定某个值是不 ...

  7. JS高级程序设计学习笔记之JS事件(1)

    事件流 冒泡 定义:事件开始时由最具体的元素接收,然后逐级上传到较为不具体的节点.(IE9.FF.Chrome.Safari会将事件一直冒泡到window对象.IE5.5及其以下会跳过<html ...

  8. 《JS高级程序设计》笔记 —— 解析查询字符串

    今天在继续翻阅<JS高级程序设计>的时候,正好翻到location对象这一小节,其中有一部分就是讲的解析查询字符串.看到这个内容立马想到了做去哪儿秋招笔试题的时候有这么一道题. 去哪儿笔试 ...

  9. JavaScript高级程序设计---学习笔记(一)

    今天,2017.3.17开始利用课余时间仔细学习<JavaScript高级程序设计>,将需要掌握的知识点记录下来,争取把书里的所有代码敲一遍并掌握. 1.标识符命名最好是第一个字母小写,剩 ...

随机推荐

  1. Hadoop HBase概念学习系列之HBase里的HRegion(五)

    首先,要区分,HRegion服务器包含两大部分:HLog部分和HRegion部分 HBase里的HRegion服务器  HBase里的HRegion 当表的大小超过设置值的时候,HBase会自动将表划 ...

  2. 第二次项目冲刺(Beta版本)2017/12/8

    一.任务分布 二.燃尽图 三.站立式会议 1.照片(就要传了) 2.任务安排 四.总结 这次吸收了上次的教训,将任务进行更加详细的分布,分工更加明确,果然效率就高多了,哈哈哈.

  3. 设置webstorm支持ES6语法

    1.  点击File目录下的Default Settings 2.  再依次点击Languages & Frameworks  ----->  JaveScript  ----> ...

  4. Monad、Actor与并发编程--基于线程与基于事件的并发编程之争

    将线程.事件.状态等包装成流的源. 核心:解决线程的消耗和锁的效率问题. Java和Node.js可以说分别是基于线程和基于事件的两个并发编程代表,它们互相指责瞧不起对方,让我们看看各种阵营的声音: ...

  5. Netty入门(二)时间服务器及客户端

    在这个例子中,我在服务器和客户端连接被创立时发送一个消息,然后在客户端解析收到的消息并输出.并且,在这个项目中我使用 POJO 代替 ByteBuf 来作为传输对象. 一.服务器实现 1.  首先我们 ...

  6. gcd以及exgcd入门讲解

    gcd就是最大公约数,gcd(x, y)一般用(x, y)表示.与此相对的是lcm,最小公倍数,lcm(x, y)一般用[x, y]表示. 人人都知道:lcm(x, y) = x * y / gcd( ...

  7. Node.js实战(八)之回调函数

    Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都 ...

  8. Kubernetes1.91(K8s)安装部署过程(二)--证书kubeconfig文件创建

    前提: 安装kubelet工具,参考:https://jimmysong.io/kubernetes-handbook/practice/kubectl-installation.html 如遇*** ...

  9. Arduino入门笔记(2):Arduino的开发和virtualbreadboard仿真环境

    欢迎加入讨论群 64770604 1.开发环境 (1)下载开发环境 Arduino的开发环境从http://arduino.cc/en/Main/Software官网下载即可,分为windows版本. ...

  10. [SDOI2012]任务安排 BZOJ2726 斜率优化+二分查找

    网上的题解...状态就没有一个和我一样的...这让我有些无从下手... 分析: 我们考虑,正常的斜率优化满足x(i)单调递增,k(i)单调递增,那么我们就可以只用维护一个单调队列满足对于当前的x(i) ...