JavaScript核心技术

1.JS简介

1.1 JS语言特点

  1. 脚本语言:JavaScript是一种解释型的脚本语言,它不同与java、C等语言先编译后执行,而JavaScript可以直接执行。
  2. 基于对象:JavaScript是一种基于对象的脚本语言,它不仅可以创建对象,也能使用现有的对象。
  3. 简单:JavaScript语言中采用的是弱类型的变量类型,对使用的数据类型未做出严格的要求,是基于Java基本语句和控制的脚本语言,其设计简单紧凑。
  4. 跨平台:JavaScript与操作系统无关,只要有一个js引擎(运行环境),就可以运行js代码。目前大多数浏览器都自带js引擎,所以可以在浏览器中运行js代码。
  5. 嵌入式:需要在html页面上操作html元素,因此需要调用浏览器提供的操作html元素的接口(html dom接口),因此开发时要同时兼备html+css+javascript+dom的技能。

1.2 JavaScript基本结构  

在一个html页面中,javaScript代码可以写在script标签中。

<script type="text/javascript" language="JavaScript">
  //在控制台输出“hello world!”
  console.log('hello world!');
</script>

注意:

  1. script标签中的type属性与language属性都可以省略。
  2. 行尾可以写分号,也可以不写; 但是,初学者建议都要写分号。
  3. 单行注释:// 多行注释: / /

1.3 JavaScript在页面中的位置  

可以将JavaScript代码放在html文件中任何位置。

  1. 放在head部分: 最常用的方式是在页面中head部分放置script元素,head部分会先加载,浏览器解析head部分就会执行这个代码,然后才解析页面的其余部分。所以进行页面显示初始化的js必须放在head里面。
  2. 放在body部分: JavaScript代码在网页读取到该语句的时候就会执行。也就是按照顺序执行。
  3. script标签可以有多个。

1.4 网页中引用JavaScript的方式

可以把HTML文件和JS代码分开,并单独创建一个外部JavaScript文件(简称JS文件),其文件后缀通常为.js,然后将JS代码直接写在JS文件中。

注意:在JS文件中,不需要script标签,直接编写JavaScript代码就可以了。

JS文件不能直接运行,需嵌入到HTML文件中执行,我们需在HTML中添加如下代码,就可将JS文件嵌入HTML文件中。

2.JavaScript基本语法             

2.1变量的声明与赋值   

javascript是弱数据类型语言,声明时不需要指定数据类型。数据类型完全由值类型决定。

1.使用let声明变量              

let num = 10;
console.log(num);

注意:

1.let是关键词,后面根变量名,表示声明一个遍历。

2.遍历的数据类型由所赋值的类型来决定。

3.console.log是打印到网页控制台,鼠标右键检查->控制台。

2.使用var声明变量   

var num = 10;
console.log(num);

var与let的区别:

在javaScript中没有块级作用域,ES6中新增了let关键词,使用let声明的变量就存在块级别作用域,例如两个if语句或for语句中同名变量会冲突报错

3.js中的数据结构类型  

js中的数据类型有六种:

1)undefin-未定义类型:未定义类型的变量,值为undefined 

2)  boolean-布尔类型:值为true/false

3)number-数字类型:任何数字(NAN也是number类型,表示“非数”)

4)string-字符串类型:值用引号(单引号或双引号)括起来

5)object-对象类型: null , 数组 , Date等

6)function-函数类型: function函数

注意:以上数据类型中,undefined,boolean,number,string也被称为原始数据类型

4.特殊值 NaN,infinity    

  • NaN,即非数值(Not a Number)是一个特殊的值
    用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。
console.log(parseInt('a'));                 //NaN
  • NaN和任何数据进行运算结果仍然是NaN。因此,想要判断一个变量是不是NaN时,不能使用这种形式:a==NaN,而要使用isNaN()函数:
    isNaN()函数在接收到一个值之后,会尝试将这个值转换为数值,如果可以转就返回false:
console.log(isNaN(5));     //false
console.log(isNaN('5'));   //false
console.log(isNaN('a'));   //true

Infinity 即无穷,是一个特殊的值

console.log(10/0);    //Infinity

2.2 js中的运算符  

1. ==与===           

==相等运算符运行时,“==”操作符会自动将两端的操作数转换为同一种数据类型后再作比较。

===严格相等(等同运算符)“===” 时严格意义上的相等,两个值和它们类型完全一致才返回true

console.log(1=='1');    //true
console.log(1==='1');    //false

2.js中的数据类型转换  

隐式转换:减,乘,除可自动进行隐式转换。

let num1 = '10';
let num2 = '5';
console.log(num1-num2)    //5
console.log(num1*num2)    //50
console.log(num1/num2)    //2

强制转换:parseInt():将字符串转换成整数。 parseFloat()将字符串转换成浮点数。

let str1 = '10';
let str2 = '10.5'
console.log(parseInt('10')+parseFloat('10.5'));  //20.5

3.流程控制语句    

if-else语句:

let score = 60;
if(score>=60){
  console.log('及格了');
}else{
  console.log('不及格');
}

switch语句:

let level = 1;
switch (level) {
  case 1:
    console.log('第一名')
    break;
  case 2:
    console.log('第二名')
    break;
  case 3:
    console.log('第三名')
    break;        
  default:
    console.log('重考')
    break;
}

while语句

let i = 0;
while(i<5){
  console.log(i);
  i++;
}

do while语句

let num = 123456;
do{
  console.log(num%10);
  num = Math.trunc(num/10);   //Math.trunc()方法去除数字的小数部分,保留整数部分。
}while(num!=0);

for语句

for(let i=0;i<5;i++){
  console.log(i);
}

3.函数,数组与对象

3.1函数

1.函数的声明与调用

声明函数有多种方式,常用的有两种:

第一种方式: function 函数名() {//函数体; }

注意:

1. function: 定义函数的关键字。

2. 函数名后的小括号中写参数。

3. 如果函数体中有return语句时,就表示函数有返回值 。

function add(){
  console.log('我是一个函数');
}
add();

第二种方式: let 函数名 = function() {//函数体; }

注意:此两种方式时完全等效的

let add = function(){
  console.log('我是一个函数');
}
add();

2 函数的参数与返回值

1. 由于js中参数不同声明数据类型,所以函数参数可以直接写

2. 只要函数体内有return语句,那么函数就有返回值

//第一种方式
function add(num1,num2){
  return num1 + num2;
}
console.log(add(10,20));
//第二种方式
let add = function(num1,num2){
  return num1 + num2;
}
console.log(add(10,20));

3 js中的作用域

1.在javaScript中,只有函数作用域,没有块级作用域。下面使用var来声明变量进行演示:

if(true){
  var num1 = 10;
}
function say(){
  var num2 = 20;
}
console.log(num1);     //10   (if块没有独立作用域,所以可以访问)
console.log(num2);     //Uncaught ReferenceError: num2 is not defined

4 声明变量时let与var的区别

为了在javaScript中也能使用块级作用域,ES6中新增了let关键词。使用let声明的变量就存在块级作用域。

if(true){
  let num1 = 10;
}
function say(){
  let num2 = 20;
}
console.log(num1);     //Uncaught ReferenceError: num1 is not defined
console.log(num2);     //Uncaught ReferenceError: num2 is not defined

3.2 数组

1 创建数组

创建数组有多种方式:

//1、创建数组时不指定长度
let arr = new Array();   
//2、创建数组时指定长度(一般不使用)
let arr = new Array(5);  
//3、创建数组时直接赋值
let arr = new Array(10,20,30);   
//4、创建数组时直接赋值
let arr = [66,80,90,77,59];

javaScript中的数组有如下特点:

     1.数组下标从0开始。

     2.虽然创建数组时,指定了长度,但实际上数组都是可变长度的,即使超出指定长度也不会有任何问题。

     3.数组存储的数据可以是任何类型。

综上所述:javaScript中的数组,更像是java中的集合。  

2.使用数组

数组中有一个属性length,此属性返回数组的长度。所以,可以使用length属性对数组进行遍历操作。

let arr = [55,23,89,65,11];  
console.log(arr.length);        //5
//遍历数组
for(let i=0;i<arr.length;i++){
  console.log(arr[i]);
}

3.3 常用内置对象   

javaScript语言给我们内置了很多封装好的通用接口,是以对象的属性和方法,函数的形式存在。

1.Array 数组内置对象           

下面是对一些常用方法做示例:

1.push()方法:

let arr = [55,3,89,9,11];  
arr.push(99);            //向数组中追加一个元素
console.log(arr);        //55,3,89,9,11,99

2.sort()方法

//sort()方法按照字符串规则排序
let arr1 = ['SMITH','WARD','MARTIN','CLARK','TURNER'];
arr1.sort();
console.log(arr1);     //"CLARK", "MARTIN", "SMITH", "TURNER", "WARD"
//所以,当对数字进行排序时,就会出现问题,此时,可以自定义排序规则函数进行排序
let arr2 = [55,3,89,9,11];
arr2.sort(rule);
function rule(num1,num2){
  return num1-num2;
}
console.log(arr2);     //3, 9, 11, 55, 89

3. join方法

let arr = [2020,08,04];
let result = arr.join('-');
console.log(result);        //2020-8-4

4.splice()方法

//从数组中间删除元素:splice(开始位置,删除元素长度)
let arr1 = [1,2,3,4,5,6,7,8,9];
arr1.splice(2,3);
console.log(arr1);    //运行结果:1,2,6,7,8,9
//在数组中间插入元素:splice(开始位置,删除元素长度,新插入元素… …)
let arr2 = [1,2,3,4,5,6,7,8,9];
arr2.splice(2,0,31,32,33);
console.log(arr2);   //运行结果:1,2,31,32,33,3,4,5,6,7,8,9
//替换数组中某个元素:splice(开始位置,要替换的元素长度,替换元素… …)
let arr3 = [1,2,3,4,5,6,7,8,9];
arr3.splice(2,1,33);
console.log(arr3);    //运行结果:1,2,33,4,5,6,7,8,9

2.String 字符串内置对象

   

下面对一些常用方法做示例:

1.charAt()方法

let str = 'hello';
for(let i=0;i<str.length;i++){
  console.log(str.charAt(i));      //h e l l o
}

2.indexOf()方法

let str = 'hello.js';
console.log(str.indexOf('.'));       //5

3.substring()方法

let str = 'zhangsan@163.com';
console.log(str.substring(str.indexOf('@')+1));                    //163.com
console.log(str.substring(str.indexOf('@')+1,str.indexOf('.')));   //163

4. split()方法

let str = '2020-08-04';
let arr = str.split('-');
console.log(arr);             //"2020", "08", "04"

3. Date日期内置对象      

示例:

let mydate = new Date();
console.log(mydate);  //Tue Aug 04 2020 17:15:22 GMT+0800 (中国标准时间)

实战应用:获取当前日期:

function getCurDate() {
  let now = new Date();
  let year = now.getFullYear();
  let month = now.getMonth() + 1;
  let day = now.getDate();
  month = month < 10 ? "0" + month : month;
  day = day < 10 ? "0" + day : day;
  return year + "-" + month + "-" + day;
}
console.log(getCurDate());

4. Math 数学内置对象

 

//返回0-9的随机整数
console.log(Math.floor(Math.random()*10));

5. Global内置对象                       

Global(全局)对象是ECMAScript中的一个特别的对象,此对象不可访问。 在ECMAScript中,不属于任何其他对象和方法,都属于Global。

1.parseInt()将字符串转换成整行

let str = '100';
console.log(parseInt(str)+1);       //101

2.parseFloat()将字符串转换成浮点型

let str = '100.5';
console.log(parseFloat(str)+1);       //101.5

3. eval()将一个字符串解析为javascript代码并执行

console.log(eval('1+2'));            //3

4.BOM模型  

4.1 BOM模型

几乎所有的浏览器都内嵌了javaScript引擎,使得javaScript语言能够在浏览器环境下运行。那么,

如果要使用javaScript语言来操作浏览器中国的各个对象,就需要使用BOM模型与DOM模型。

 1.浏览器对象模型BOM(Browser Object Model):提供了独立于内容的,可以与浏览器窗口进行互动的对象结构。

 2.文档对象模型DOM(Document Object Model):定义访问和处理HTML文档的标准方法。DOM将HTML文档呈现为带元素,属性和文本的树结构(节点树)。

BOM模型与DOM模型示意图:

浏览器窗口中的BOM与DOM: 

2.1 BOM编程  

1.window对象             

window对象是BOM的核心,window对象指当前的浏览器窗口。window对象是整个浏览器对象模型中的顶层对象,它下游很多子对象(包括document对象(DOM))。

window对象有很多属性和方法:

1).alert()对话框

alert()方法;在页面上弹出一个只有确定按钮的对话框

window.alert('hello');

window作为i顶层对象,可以省略

alert('hello');

 2). confim()对话框

alert()方法:在页面上弹出一个确定和取消按钮的对话框。此对话框返回一个布尔值(点击“确定”按钮,返回true;点击“取消”按钮,返回false)。

if(confirm('确定要删除吗')){
  console.log('删除');
}else{
  console.log('不删除');
}

3). open()与close()方法

open()方法:打开一个浏览器窗口。

close()方法:关闭一个浏览器窗口。

<body>
  <input type="button" value="打开百度" onclick="openBaidu()">	<!--onclick调用JS方法-->
  <input type="button" value="关闭百度" onclick="closeBaidu()"><!--onclick后面章节会讲到-->
  <script>
    //声明一个引用
    let obj = null;
    function openBaidu(){
      //打开百度窗口,并让obj指向百度窗口
      obj = window.open('http://www.baidu.com');
      //obj = open('http://www.baidu.com');       //window可以省略
    }
    function closeBaidu(){
      //关闭百度窗口
      obj.close();
    }
  </script>
</body>

注: 在一个页面标签中国,添加onclick,就表示给此标签设置一个单机事件。当单机此标签时,会调用onclick后指定的函数

        script标签必须写在html代码的后面,也就是javascript代码必须要卸载所有html代码的最后面,原因是,必须要等到所有html标签都加载完毕之后,才能操作这些标签对象。

4)setTimeout()定时器

setTimeout()函数能够在指定的时间间隔后,调用一个函数(此函数称为回调函数)。

注:setTimeout()在指定的时间间隔后,只调用一次

setTimeout(function(){
  console.log('hello,3秒到了');
},3000);

前面血管,函数也是一个对象,也可以使用一个引用来指向它。所以还要如下的写法

function callback(){
  console.log('hello,3秒到了');
}
setTimeout(callback,3000);

或者:

let callback = function(){
  console.log('hello,3秒到了');
}
setTimeout(callback,3000);

5)setInterval()定时器

setInterval()函数能够在指定的时间间隔后,调用一个函数(此函数称为回调函数)。

注意:setInterval()在指定的时间间隔后,可以调用无限多次

let callback = function(){
  console.log('hello,3秒到了');
}
setInterval(callback,3000);

2.location对象

location用于获取或设置地址栏中的url,并且提供若干方法一哦那个与刷新和跳转等。location.reload()页面重新加载(相当于刷新按钮) location.href 返回或设置完整的url

<button onclick="doReload()">刷新</button>
<button onclick="toBaidu()">跳转百度</button>
<script>
  function doReload(){
    location.reload();
  }
  function toBaidu(){
    location.href = 'http://www.baidu.com';
  }
</script>

3.history对象   

history对象记录了用户曾经浏览过的页面(URL),并可以实现浏览器前进与后退相似导航的功能。history对象就是访问后的URL。 history.back() 加载history列表中的前一个URL,也就是后退。 history.forward() 加载history列表中的下一个URL,也就是前进。 history.go() 加载history列表中的某一个URL。0:当前; -1:相当于back(); 1:相当于forward()

创建两个html文件,第一个html文件中书写:

<a href="b.html">跳转b页面</a>
<a href="javascript:history.go(-1)">回退</a>

5.DOM模型      

5.1 DOM模型  

window对象下的document对象就是DOM模型。DOM描绘了一个层次化的节点树,每一个节点就是一个html标签,而且每一个节点也是一个DOM对象。

5.2操作DOM

1.获取DOM对象常用方法有以下几种:

1.getElementByld()通过元素的ID属性获取DOM对象,获取的是一个DOM对象

2.getElementsByTagName()通过元素的标签名获取DOM对象,获取的是一组DOM对象

3.getElementsByClassName()通过元素的class属性获取DOM对象,获取的是一组DOM对象

4.getElementsByName() 通过元素的name属性获取DOM对象,获取的是一组DOM对象

	<p id="one">这是一个p标签</p>
  <p class="first">这是一个p标签</p>
  <p class="first">这是一个p标签</p>
  <p name="username">这是一个p标签</p>
  <p name="username">这是一个p标签</p>
  <script>
      let oneObj = document.getElementById('one');
      oneObj.style.color = 'red';     //只有第一个p标签字体变红色
      let pArr = document.getElementsByTagName('p');
      console.log(pArr.length);       //获取所有p标签对象,是数组,长度为5
      let firstArr = document.getElementsByClassName('first');
      console.log(firstArr.length);   //获取所有class为first的对象,是数组,长度为2
      let userArr = document.getElementsByName('user');
      console.log(userArr.length);    //获取所有name属性为user的对象,是数组,长度为2
  </script>

2.其他获取DOM对象的方法(扩展)   

1.document.documentElement 获取html对象

2.document.body 获取body对象

3.document.querySelector() 通过选择器获取一个DOM对象   

4.document.querySelectorAll() 通过选择器获取一组DOM对象

<div>
  <p>这是一个p标签</p>
  <p>这是一个p标签</p>
</div>
<script>
    let htmlObj = document.documentElement;
    htmlObj.style.backgroundColor = 'red';       //设置html背景色
    let bodyObj = document.body;
    bodyObj.style.fontSize = '36px';             //设置body中所有元素的字体大小
    let pObj = document.querySelector('div p');
    pObj.style.color = 'blue';                   //第一个p标签有效
    let pArr = document.querySelectorAll('div p');
    console.log(pArr.length);                    //数组长度为2
</script>

3.获取DOM对象的时机  

1)要特别注意一点,javaScript代码要写在body的最后。因此,必须要保证html代码全部加载完毕之后,才执行javaScript代码,才能获取DOM对象。

2)如果一定要将javaScript代码放在html之前要么要做如下写法:

<script>
    //文档就绪函数
    window.onload = function(){
      var obj = document.getElementById("one");
      obj.innerHTML = 'hello world!';
    };
</script>
<p id="one"></p>

4.操作DOM对象属性  

操作DOM对象的属性,常用的都有两种方式:

1.通过DOM对象直接操作属性

<p>hello world</p>
<input type="text">
<script>
  document.getElementsByTagName('p')[0].title = 'aaaa';
  let userName = document.getElementsByTagName('input')[0];
  userName.value = 'zhangsan';
  userName.disabled = true;
</script>

2.通过DOM对象中的方法操作属性 setAttribubte()设置元素的属性值getAttribute()获取元素的属性值removeAttrjibute()移除元素的属性值

<p>hello world</p>
<input type="text">
<script>
  document.getElementsByTagName('p')[0].setAttribute('title','aaaa');
  let userName = document.getElementsByTagName('input')[0];
  userName.setAttribute('value','zhangsan');
  userName.setAttribute('disabled',true);
  userName.removeAttribute('disabled');
  console.log(userName.getAttribute('value'))
</script>

5.DOM对象中的常用属性 

innerHTML属性:用于设置或获取HTML元素中的内容。

<p id="one">
  <span>这是一个段落</span>
</p>
<script>
  let obj = document.getElementById('one');
  console.log(obj.innerHTML);                  //<span>这是一个段落</span>
  obj.innerHTML = '<span>hello world!</span>';
</script>

innerText属性:用于设置或获取HTML元素中的纯文本。

<p id="one">
  <span>这是一个段落</span>
</p>
<script>
  let obj = document.getElementById('one');
  console.log(obj.innerText);                  //这是一个段落
  obj.innerText = 'hello world!';
</script>

className属性: 用于设置或获取DOM对象的类样式

<div id="one" class="first"></div>
<script>
  let obj = document.getElementById('one');
  console.log(obj.className);                //first
  obj.className = 'two';
</script>

4.style属性:用于设置或获取DOM对象的style样式

<div id="one">我是一个div</div>
<script>
  let obj = document.getElementById('one');
  obj.style.width = '300px';
  obj.style.height = '200px';
  obj.style.backgroundColor = 'blue';
  obj.style.fontSize = '24px';
  obj.style.color = '#fff';
  obj.style.border = 'solid 10px red';
  obj.style.display = 'block';          //设置DOM对象的显示和隐藏
</script>

注意:

在使用javaScript操作DOM对象的CSS样式时,由于javaScript不能识别“-”字符,所以所有CSS样式的书写,要一律从xxxx-xxxx形式转换为xxxxXxxx的形式。

6.遍历DOM数组

在上面的例子中,都是使用getElemmentByld获取一个DOM对象进行操作。但在实际开发中,经常会同时操作多个DOM对象,此时,可以使用循环来遍历DOM数组。

<p>我是p标签</p>
<p>我是p标签</p>
<p>我是p标签</p>
<script>
  let arr = document.getElementsByTagName('p');
  for(let i=0;i<arr.length;i++){
    arr[i].style.color = 'red';
    arr[i].style.fontSize = '36px';
  }
</script>

JavaScript核心技术 简介: 《JavaScript核心技术》对于各种浏览器、浏览器版本、JavaScript版本、DOM版本的介绍,有助于我们理解所遇到的各种新旧代码,使我们能够对这些代码做出正确的取舍。《JavaScript核心技术》还提供了一些使用JavaScript的最佳实践。无论是新手还是老手,这些如何正确使用JavaScript的经验都能帮助他们养成良好的编程习惯。《JavaScript核心技术》还介绍了一些调试和开发JavaScript的工具,这些工具无疑能够提高我们的开发效率。 《JavaScript核心技术》最后对于Ajax和几个流行的JavaScript库的介绍,无疑会开阔我们在JavaScript使用上的思路。 《JavaScript核心技术》是一本真正意义上的“新书”,不仅介绍了最新的JavaScript知识和方向,还完全覆盖了当今Web开发中关于JavaScript的所有重要话题,它使用了大量实例代码,图文并茂地讲解了使用JavaScript的各个层次和领域的内容。它不是一本参考手册,但却是一本值得拥有的教程。 JavaScript核心技术 目录: 前言 第1章JavaScript初探 1.1规范和实现相互交织的历史 1.2跨浏览器的不兼容性和其他常见的JavaScript传说 1.3你能用JavaScript来做什么 1.4JavaScript初探:“HelloWorld!” 1.5JavaScript沙箱 1.6可访问性和JavaScript的最佳实践 第2章JavaScript数据类型与变量 2.1变量的标识 2.2作用域 2.3简单类型 2.4常量:有名称但不改变 2.5习题 第3章运算符和语句 3.1JavaScript语句的格式 3.2简单语句 3.3条件语句和程序流 3.4条件运算符 3.5逻辑运算符 3.6高级语句:循环语句 3.7习题 第4章JavaScript对象 4.1对象构造函数 4.2Number对象 4.3String对象 4.4正则表达式与RegExp 4.5有专门用途的对象:Date和Math 4.6JavaScript数组 4.7关联数组:不是数组的数组 4.8习题 第5章函数 5.1定义函数:细数所有方式 5.2回调函数 5.3函数和递归 5.4嵌套函数、函数闭包和内存泄漏 5.5作为对象的函数 5.6习题 第6章捕捉事件 6.1O级DOM上的事件句柄 6.22级DOM上的事件句柄 6.3产生事件 6.4习题 第7章表单与即时验证 7.1访问表单 7.2把事件附加在表单上:不同的方法 7.3选择列表 7.4单选按钮和复选框 7.5输入字段和JiT正则表达式 7.6习题 第8章沙箱及之上的cookie、连通性和隐私 第9章基础浏览器对象 第10章DOM:文档对象模型 第11章创建定制的JavaScript对象 第12章构建动态网页:在脚本中加入样式 第13章使用Ajax 第14章好消息:生动的程序库!令人惊异的Web服务!有趣的API! 附录习题答案
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值