JavaScript学习笔记(1)

来源:互联网 发布:php str contains 编辑:程序博客网 时间:2024/04/30 06:41

为了学习公司的js框架,项目经理组织我们共同学习《JavaScript高级程序设计(第3版)》一书。我将用博文记录我们的学习点滴。

一、JavaScript简介

1、JavaScript是什么?它能干什么?

个人理解是客户端(实际指浏览器)脚本,能与浏览器窗口及网页内容进行交互。

JavaScript的核心语言功能由ECMAScript提供。ECMAScript规定了这门语言的语法、类型、语句、关键字、保留字、操作符、对象等。ECMAScript本身与Web浏览器没有依赖关系,Web浏览器只是ECMAScript应用的宿主环境之一,比如Node、Adobe Flash也是宿主环境。

与浏览器窗口的交互由BOM(浏览器对象模型Browser Object Model)提供访问方法和接口,比如能弹出关闭移动缩放浏览器窗口,能支持cookies,提供navigator、location、screen对象以及XMLHttpRequest、ActiveXObject等自定义对象;

与网页内容的交互由DOM(文档对象模型Document Object Model)提供访问方法和接口,它把整个页面映射为一个多层节点结构,能对文档中的任意部分进行访问和操作。

 

JavaScript主要可以做客户端验证,能实现各种提升用户体验的动态效果。

 

二、在HTML中使用JavaScript

1.在HTML中使用JavaScript需要使用<script>元素,有嵌入脚本和外部脚本两种写法。

嵌入脚本:<script type="text/javascript" >alert("hello,javascript");</script>

 外部脚本:<script type="text/javascript" src="example.js"> </script>

//这里的src值可以是同一个服务器上的文件路径,也可以是其他任何域中的文件(个人理解为一个网址)。

 

2.<script>的async属性和defer属性

使用这两个属性能将JavaScript脚本延迟到整个页面都解析完毕后再运行

<script type="text/javascript"  defer="defer" src="example1.js"> </script>

<script type="text/javascript"  async="async" src="example2.js"> </script>

 

3.<noscript>元素的使用

可以指定在不支持脚本的浏览器中显示的替代内容,写在<body>标签中。

<body>

             <noscript>该页面需要您的浏览器支持(启用)JavaScript</noscript>

</body>

 

三、基本概念

1.JavaScript区分大小写

2.ECMAScript5引入了严格模式的概念,在代码中添加"use strict"即可,要么在脚本顶部,要么只在特定的函数体中。

3.ECMAScript变量是松散类型的

4.变量用var声明时,是局部变量,省去var则是全局变量。

5.ECMAScript中的数据类型,有5中简单的数据类型(也称基本数据类型)UndefinedNullBooleanNumberString和一种复杂数据类型Object

 

ECMAScript中的数据类型

类型学习备注Undefined和Null

undefined:使用var声明变量但未对其初始化时,变量的值就是undefined(没必要显式设置),执行typeof操作符的返回值也是undefined

null表示一个空对象指针,执行typeof操作符时返回值是object;显式得设置为null表明该变量想存对象,是有好处的

Number

数值范围是-Infinity~Infinity,可使用isFinite()来判断数字是否为有限大;另外,使用isNaN()来判断参数是否为数字;

注意:NaN与任何值都不相等,包括与NaN本身。

数值转换函数Number(),parseInt(),parseFloat():Boolean值true转为1,false转为0;

当字符串中以数字开头后边有其他字符,那么使用Number()转换时为NaN,使用parseInt()时会忽略后边的非数字字符;

对于空字符串,使用Number()转换时结果为0,使用parseInt()转换时为NaN;

parseInt()提供了第二个参数表示转换为多少进制,而Number()和parseFloat()则只能转为10进制;

使用parseFloat()转换时,多个小数点只认第一个;

Boolean有true和false两个字面值;但所有类型都可以通过转型函数Boolean()转换为一个Boolean值。对于Null和Undefined类型,转为false;对于Number,0和NaN会转为false,其余转为true;对于String,""转为false,非空字符串转为trueString

采用单引号、双引号都行,但需要配对;调用字符串的length属性得到的值可能不准确(如果包含转义序列时);

字符串转换函数toString()和String():

null和undefined没有toString(),而String()返回这两个值的字面值;

在数值调用toString()函数时,可传入一个表示输出数值基数的参数,即按多少进制输出,不传时是按照10进制输出的;

Object

对象是一组数据和功能的组合;

创建对象时,如果没有参数,可省略小括号,写为var obj = new Object;

检查给定的属性在当前对象的实例中是否存在:hasOwnProperty(propertyName)

检查传入的对象是否是另一个对象的原型:isPrototypeOf(object)

检查给定的属性是否能够使用for-in语句来枚举:propertyIsEnumerable(propertyName)

返回对象的字符串表示:toString()、toLocaleString()、valueOf()  (valueOf()返回对象的字符串、数值或布尔值表示)

 

6.ECMAScript中的操作符

操作符学习备注递增和递减操作符

++i与i++,注意前置和后置的区别;

此操作符适用于Undefined和Null外的所有类型,非数值类型会先转换为数值然后执行加减1操作

一元加和减操作符就按正负号理解,也可用于转换数据类型位操作符

按内存中数值的位来操作数值;

默认情况下,ECMAScript中的所有整数都是有符号整数;

按位非Not(符号为一个波浪线~,与操作数的负值减1结果相同):

var num1 = 25;   var num2 = ~num1;

按位或OR(符号为一个竖线|):var result = 25|3; alert(result);//结果为27

按位异或XOR(由一个插入符号表示,^)

移位操作:左移、有符号的右移、无符号右移

var oldValue = 2;    var newValue = oldValue  << 5; //表示2转换为二进制后左移5位

布尔操作符

逻辑非(!)、逻辑与(&&)、逻辑或(||),

可用于转换数据类型,即先隐式执行Boolean()

乘性操作符乘法、除法、求模,注意有Infinity参与的乘性运算,结果往往是正负Infinity或NaN加性操作符加法、减法,同样注意有Infinity参与的运算关系操作符

小于、大于、小于等于、大于等于

如果两个操作数是字符串,则比较两个字符串对应的字符串编码值;

如果只有一个操作数是数值,则先将另一个操作数(若为对象则调用其valueOf()或toString()方法)转换为一个数值,然后执行比较;

相等操作符相等和不相等——先转换再比较,全等和不全等——仅比较而不转换条件操作符类似于var max = (num1 > num2) ?num1:num2;赋值操作符

重点介绍一下复合赋值操作符

(*=、 /= 、%= 、+=、-=、左移赋值<<=、有符号右移赋值>>=、无符号右移赋值>>>=)

逗号操作符

多用于声明多个变量;

用于赋值时总会返回表达式中的最后一项:如var num = (5,2,1);//返回1

7.语句

语句学习备注if始终使用代码块do-while常用于循环体中代码至少要被执行一次的情形while for

for循环的循环变量是全局变量:

var count = 10;

for(var i = 0; i<count; i++){

     alert(i);

}

alert(i);//此行代码执行结果为10

for-in

可以用来枚举对象的属性,在使用for-in前需要检测对象是否为null或undefined

for(var propName in window){

       document.write(propName);//顺序不可预测

lable在代码中添加标签,语法如label:statementbreak和continue with

将代码的作用域设置到一个特定的对象中

示例:

with(location){

      var url = href;

      var hostName = hostname;

}

如果在局部变量中找不到变量(如href)的定义,就会在location对象中看是否有相同的属性

另外,大量使用with语句会降低性能

switch支持任何数据类型,如字符串,但比较的时候采用的是全等操作符

8.函数

可return也可不return,最好是要么始终返回一个值,要么永远都不要返回值

函数的arguments对象的length属性可以获知有多少个参数传递给了函数

这里函数没有重载一说

 

 

 

原创粉丝点击