文章目录

前言

我现在要且必要学习一下js知识,学习笔记必不可少,在这里,我将写下我学习遇到的重难点以及一些bug和自己犯得错误(主要是自己犯得低级错误)。

关于—img标签onclick点击不跳转function

遇到这个问题调了半天,用alert提示发现根本就没跳转自定义方法,后来发现最后多加了一个"}"!!!!!

<input type="image" id="test1" onclick="changeImage()" src="../static/images/22.jpg" width="400" height="400" >

function changeImage(){
	 
	element=document.getElementById('test1')
	if (element.src.match("22"))
	{
		element.src="../static/images/11.jpg";
	}
	else
	{
		element.src="../static/images/22.jpg";
	}
}
}

以后要认真点啊,先确保语法正确。

JavaScript 中最重要的保留字(按字母顺序):


abstract else instanceof super
boolean enum int switch
break export interface synchronized
byte extends let this
case false long throw
catch final native throws
char finally new transient
class float null true
const for package try
continue function private typeof
debugger goto protected var
default if public void
delete implements return volatile
do import short while
double in static with

JavaScript 数据类型


var length = 16;                  // Number 通过数字字面量赋值
var points = x * 10;               // Number 通过表达式字面量赋值
var lastName = "Johnson";             // String 通过字符串字面量赋值
var cars = ["Saab", "Volvo", "BMW"];   // Array 通过数组字面量赋值
var person = {firstName:"John", lastName:"Doe"}; // Object 通过对象字面量赋值

三种变量命名规则:

var firstName=‘king’;//小驼峰

var FirstName=‘queen’;//大驼峰

var first_name=‘maizi’;//下划线法

JavaScript 语句标识符

JavaScript 语句通常以一个 语句标识符 为开始,并执行该语句。

语句标识符是保留关键字不能作为变量名使用。

下表列出了 JavaScript 语句标识符 (关键字) :

语句 描述
break 用于跳出循环。
catch 语句块,在 try 语句块执行出错时执行 catch 语句块。
continue 跳过循环中的一个迭代。
do … while 执行一个语句块,在条件语句为 true 时继续执行该语句块。
for 在条件语句为 true 时,可以将代码块执行指定的次数。
for … in 用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作)。
function 定义一个函数
if … else 用于基于不同的条件来执行不同的动作。
return 退出函数
switch 用于基于不同的条件来执行不同的动作。
throw 抛出(生成)错误 。
try 实现错误处理,与 catch 一同使用。
var 声明一个变量。
while 当条件语句为 true 时,执行语句块。

声明变量类型

当您声明新变量时,可以使用关键词 “new” 来声明其类型:

var carname=new String;
var x=   new Number;
var y=   new Boolean;
var cars=  new Array;
var person= new Object;


lamp JavaScript 变量均为对象。当您声明一个变量时,就创建了一个新的对象。

利用 toString() 方法可以把数值转换为字符串。

<script>
var a=100;
var c=a.toString();
alert(typeof(c));      //typeof()方法验证转换后的数据类型
</script>

使用 parseInt() 和 parseFloat() 方法可以把字符串转换为数值。

<script>
var str="123.30";
var a=parseInt(str);    //parseInt()方法把字符串转换为整数,parseFloat()方法把字符串转换为浮点数
var b=parseFloat(str);
</script>

要把任何值转换为布尔型数据,在值的前面增加两个 !! 感叹号即可,!!0False,其余的均为 True

基本类型的变量是存放在栈内存(Stack)里的

var a,b;
a = "zyj";
b = a;
console.log(a);   // zyj
console.log(b);   // zyj
a = "呵呵";       // 改变 a 的值,并不影响 b 的值
console.log(a);   // 呵呵
console.log(b);   // zyj

图解如下:栈内存中包括了变量的标识符和变量的值。

img

引用类型的值是保存在堆内存(Heap)中的对象(Object)

var a = {name:"percy"};
var b;
b = a;
a.name = "zyj";
console.log(b.name);    // zyj
b.age = 22;
console.log(a.age);     // 22
var c = {
  name: "zyj",
  age: 22
};

图解如下:

栈内存中保存了变量标识符和指向堆内存中该对象的指针

堆内存中保存了对象的内容

img


数组有四种方式:

var arr1 = new Array('a', 'b', 'c');    //这是一个预定义的数组,在创建时初始化
var arr2 = ['a', 'b', 'c' ];       //同样是在创建时初始化,但是这种创建更为简洁直观
var arr3 = new Array( );   var arr4 = [ ];     //这两种是创建空的数组

在数组操作中,最值得注意的是下标的使用,容易出错

对象的创建,一般推荐使用

var people = {name : 'Tom', age : 21 , eat : function(){  }    }

也可先创建对象再追加属性和方法

var people = new Object();
people.name = 'Tom';   
people.age = 21;  
people.eat = function(){  }
限制复选框最多选择几项的方法:

HTML代码:

<input type= "checkbox" name= "sport"/>篮球<br />
<input type= "checkbox" name= "sport"/>足球<br />
<input type= "checkbox" name= "sport"/>排球<br />
<input type= "checkbox" name= "sport"/>羽毛球<br/>
<input type= "checkbox" name= "sport"/>乒乓球<br/>
<p>最多选择三项</p>

JavaScript代码:

var sportSelect = document.getElementsByName('sport' ),
              maxNums   = 3;
           for(var i in sportSelect){
              sportSelect[i]. onclick = function (){
                 var _sportSelect = document.getElementsByName('sport' ),
                   cNums      = 0;
                 for(var i in _sportSelect){
                   if(i == 'length') break ;
                   if(_sportSelect[i].checked){
                      cNums ++;
                   }
                }
                 if(cNums > maxNums){
                   this.checked = false;
                    alert('最多只能选择三项');
                }
              }
           }

局部变量:在函数中通过var声明的变量。

全局变量:在函数外通过var声明的变量。

没有声明就使用的变量,默认为全局变量,不论这个变量在哪被使用。

在 ES6 中,提供了 let 关键字和 const 关键字。

let 的声明方式与 var 相同,用 let 来代替 var 来声明变量,就可以把变量限制在当前代码块中。

使用 const 声明的是常量,其值一旦被设定便不可被更改。

let 和 var 的区别代码实例:

function varTest() {
  var x = 1;
  if (true) {
    var x = 2;  // 同样的变量!
    console.log(x);  // 2
  }
  console.log(x);  // 2
}

function letTest() {
  let x = 1;
  if (true) {
    let x = 2;  // 不同的变量
    console.log(x);  // 2
  }
  console.log(x);  // 1
}

常见的HTML事件

下面是一些常见的HTML事件的列表:

事件 描述
onchange HTML 元素改变
onclick 用户点击 HTML 元素
onmouseover 用户在一个HTML元素上移动鼠标
onmouseout 用户从一个HTML元素上移开鼠标
onkeydown 用户按下键盘按键
onload 浏览器已完成页面的加载

更多事件列表: JavaScript 参考手册 - HTML DOM 事件

反斜杠是一个转义字符。 转义字符将特殊字符转换为字符串字符:

转义字符 () 可以用于转义撇号,换行,引号,等其他特殊字符。

下表中列举了在字符串中可以使用转义字符转义的特殊字符:

代码 输出
' 单引号
" 双引号
\ 反斜杠
\n 换行
\r 回车
\t tab(制表符)
\b 退格符
\f 换页符

不要创建 String 对象。它会拖慢执行速度,并可能产生其他副作用。。。

=== 为绝对相等,即数据类型与值都必须相等。

var x = "JohnJohn";              // x 是字符串
y = x.charAt(2); // h
y = x.charCodeAt(2); // 104
y = x.concat(y, y); // JohnJohn104104, x+y+y
y = x.indexOf('h'); // 2, 索引从0开始
y = x.lastIndexOf('h'); // 6
y = x.slice();
y = x.split('o'); //J,hnJ,hn
y = x.substr(2); // hnJohn
y = x.substring(2,4) // hn,[2,3]
y = x.toLocaleLowerCase(); // johnjohn,小写
y = x.toLocaleUpperCase(); // JOHNJOHN,大写
y = x.toString(); // 转成Stirng
y = x.toUpperCase(); // JOHNJOHN,大写
y = x.trim(); // JohnJohn,去除两端的空格
y = x.valueOf(); // 返回某个字符串对象的原始值

1、字符串一个很能强大的数据类型;在执行加 + 时,将被加的对象统一处理为字符串。

2、bool 类型在与数字类型进行相加时,视为 0 或者 1 处理。

3、null 类型与数字类型进行累加时,视为 0 处理。

4、bool 类型与 null 类型进行累加时,视为其与整数类型累加处理。

5、undefined 除了与字符串进行累加时有效(undefined 视为字符串"undefined"处理),其他情况皆返回 NaN。

6、求模 % 运算,运算结果只取决于第一个数字的正负。

-12 % -8 = -4; 
12 % -8 =  4;
-12 % 8 = -4;

7、查看 String 数据类型支持的方法和属性:

打开网页后 F12 进行开发调试环境,找到 console 标签页面,执行:

var str = new String('string');   
str 

点开列表下拉箭头即可:

img


1、定义

  • (1)undefined:是所有没有赋值变量的默认值,自动赋值。
  • (2)null:主动释放一个变量引用的对象,表示一个变量不再指向任何对象地址。

2、何时使用null?

当使用完一个比较大的对象时,需要对其进行释放内存时,设置为 null。

3、null 与 undefined 的异同点是什么呢?

共同点:都是原始类型,保存在栈中变量本地。

不同点:

(1)undefined——表示变量声明过但并未赋过值。

它是所有未赋值变量默认值,例如:

var a;    // a 自动被赋值为 undefined

(2)null——表示一个变量将来可能指向一个对象。

一般用于主动释放指向对象的引用,例如:

var emps = ['ss','nn'];
emps = null;     // 释放指向数组的引用

4、延伸——垃圾回收站

它是专门释放对象内存的一个程序。

  • (1)在底层,后台伴随当前程序同时运行;引擎会定时自动调用垃圾回收期;
  • (2)总有一个对象不再被任何变量引用时,才释放。

JavaScript 数据类型

在 JavaScript 中有 6 种不同的数据类型:

  • string
  • number
  • boolean
  • object
  • function
  • symbol

3 种对象类型:

  • Object
  • Date
  • Array

2 个不包含任何值的数据类型:

  • null
  • undefined

你可以使用 constructor 属性来查看对象是否为数组 (包含字符串 “Array”):

function isArray(myArray) {
  return myArray.constructor.toString().indexOf("Array") > -1;
}

你可以使用 constructor 属性来查看对象是否为日期 (包含字符串 “Date”):

function isDate(myDate) {
  return myDate.constructor.toString().indexOf("Date") > -1;
}

Date 方法 章节中,你可以查看更多关于日期转换为字符串的函数:

方法 描述
getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。
getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。
getFullYear() 从 Date 对象以四位数字返回年份。
getHours() 返回 Date 对象的小时 (0 ~ 23)。
getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。
getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。
getMonth() 从 Date 对象返回月份 (0 ~ 11)。
getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。
getTime() 返回 1970 年 1 月 1 日至今的毫秒数。

下表展示了使用不同的数值转换为数字(Number), 字符串(String), 布尔值(Boolean):

原始值 转换为数字 转换为字符串 转换为布尔值 实例
false 0 “false” false 尝试一下 »
true 1 “true” true 尝试一下 »
0 0 “0” false 尝试一下 »
1 1 “1” true 尝试一下 »
“0” 0 “0” true 尝试一下 »
“000” 0 “000” true 尝试一下 »
“1” 1 “1” true 尝试一下 »
NaN NaN “NaN” false 尝试一下 »
Infinity Infinity “Infinity” true 尝试一下 »
-Infinity -Infinity “-Infinity” true 尝试一下 »
"" 0 "" false 尝试一下 »
“20” 20 “20” true 尝试一下 »
“Runoob” NaN “Runoob” true 尝试一下 »
[ ] 0 "" true 尝试一下 »
[20] 20 “20” true 尝试一下 »
[10,20] NaN “10,20” true 尝试一下 »
[“Runoob”] NaN “Runoob” true 尝试一下 »
[“Runoob”,“Google”] NaN “Runoob,Google” true 尝试一下 »
function(){} NaN “function(){}” true 尝试一下 »
{ } NaN “[object Object]” true 尝试一下 »
null 0 “null” false 尝试一下 »
undefined NaN “undefined” false 尝试一下 »

return myArray.constructor.toString().indexOf(“Array”) > -1;这句话怎么解释?

1、myArray 是函数 isArray 的参数,这里调用函数的时候,会传来数组 fruits。

2、constructor 是一个属性,构造函数属性,不同类型的数据,会得到相应不同的值。因为 myArray 是个数组,这里的 myArray.constructor 的值就是 function Array() { [native code] }。(如果 myArray 是个字符串,myArray.constructor 的值就是function String() { [native code] }。还有 number,boolean,object,等等。)

3、toString() 是个方法,变字符串的方法,这里把 function Array() { [native code] } 变成字符串,为了后面好检索。

4、indexOf(“Array”) 是个方法,检索字符串,这里看字符串 function Array() { [native code] } 里有没有Array,有就返回首次出现的位置,是一个数值,这里是 9。如果出现在第一个字符,会返回 0。空格参与计数。如果没有找到,就返回 -1。只要 >-1,就说明有 Array,就能判断原来那个函数调用传来的 fruits 是一个数组。如果 myArray.constructor.toString().indexOf(“Object”)>-1,那么 myArray 就是一个 Object 对象。不过那样地话,这个参数的名字就没取好了,应该叫做 myObject。

==JSON 和 XML 都用于接收 web 服务端的数据。==