初始Javascript
js是一种专为域网页交互设计的脚本语言。由三部分组成:
-ECMAScript(ECMA-262定义)提供核心语言功能。(ECMAScript,是一种国际化的标准,所有浏览器都支持)
文档对象模型(DOM)提供访问和操作网页内容的方法和接口。
-浏览器对象模型(BOM)提供与浏览器交互的方法和接口
(其它浏览器对后两部分的支持程度不一样。)
js是一种可以与html标记语言混合使用的脚本语言,其编写的程序可以直接在浏览器中解释执行(与编译、执行)(解释执行,就是解释道哪行代码,就执行哪里。)
js的国际标准是ECMAScript(语法、数组等等。)
<script>
标签可以放在任何位置,一般放在<head>
标签中
变量:
JavaScript是一种弱形式的脚本语言
var c=3;即变量的声明(变量使用前必须加var声明,编程规范)
规则:
1、变量命名必须以字母或是下标符号“_”或是"$"开头
2、变量名长度不能超过255字符。
3、变量名中不允许使用空格。
4、不用使用脚本语言中保留的关键字及保留付哈作为变量名。
5、变量名区分大小写。
全局变量:在方法外声明的变量,方法内部没有加var关键字声明的变量。
局部变量:在方法内部,使用var声明的变量。
alert相当于window.alert()
alert(‘hello javascript’)
数据类型
共有七种数据类型:Undefined, Null,Boolean, String, Symbol, Number和Object.
前六种是简单(基本)数据类型,其中Boolean, String,Number有基本包装类型,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象
ES6新加了Symbol类型,是一种特殊的、不可变的数据类型,可以作为对象属性的标识符使用。
typeof
· “undefined”如果这个值未定义
· “boolean”如果这个值是布尔值
· “string”如果这个值是字符串
· “number”如果这个值是数值
· “object”如果这个值是对象或者null
· “function”如果这个值是函数
· “symbol”如果这个值是Symbol类型(ES6新增)
实际上JavaScript中函数也是对象。
大体上来说,基本类型的值应该使用 typeof来检测
数据类型转换
一、显式类型转换(强制类型转换):Number()、parseInt()、parseFloat()等
1.Number():Number()方法能将看起来像数字的字符串变成数字,将true转换为1,false转换为0;尽可能地转换。当遇到函数时,Number()方法无法对其转换,将输出NaN。
var a='100';
alert(a+100);//输出 100100
alert(Number(a)+100);//输出 200
var a='0000100';//如果100前面很多0
alert(a+100);//输出 0000100100
alert(Number(a)+100);//输出 200
var a='+100';
alert(a+100);//输出 +100100
alert(Number(a)+100);//输出 200
var a='';
alert(a+100);//输出 100
alert(Number(a)+100);//输出 100
var a=' ';
alert(a);//输出一个空格
alert(Number(a));//输出 0
var a=true;
alert(a);//输出 true
alert(Number(a));//输出 1
var a=[];//数组为空
alert(a);//无输出
alert(Number(a));//输出 0
var a=[''];//数组里面有空字符串
alert(a);//无输出
alert(Number(a));//输出 0
var a=[123];
alert(a);//输出 123
alert(Number(a));//输出 123
var a=[1,2,3];
alert(a);//输出 [1,2,3]
alert(Number(a));//输出 NaN
var a=null;
alert(a);//输出 null
alert(Number(a));//输出 0
var a=function(){alert(1)};
alert(a);//输出 function(){alert(1)}
alert(Number(a));//输出 NaN
var json={abc:123};//只要是json类型,就转化不了
alert(json);//输出 [object Object]
alert(Number(json));//输出 NaN
var a;
alert(a);//输出 undefined
alert(Number(a));//输出 NaN
2.ParseInt():parseInt()从左到右一个一个转换,遇到一个非数字的东西,就不再转化了。但是无法转换true/false等其他类型。parseInt()认±和空格,如果遇到,也认为是数字的一部分,也会继续往后走。
var a='100px1564623';//parseInt()从左到右一个一个转换,遇到一个非数字的东西,就不再转化了。但是无法转换true/false等其他类型。parseInt()认+-和空格,如果遇到,也认为是数字的一部分,也会继续往后走。
alert(parseInt(a));//输出 100
alert(parseInt(a,16));//输出 256.将a看成16进制,转换为十进制的数字。默认情况下按十进制转。
var a='12.34元';
alert(parseInt(a));//输出 12
- ParseFloat():遇到小数点可以使用该方法。
//这时,可以使用方法parseFloat()
alert(parseFloat(a));//输出12.34
二、隐式类型转换:
-
+。 如‘200’+3 变成字符串
-
-
- / % 比如‘200’-3 变成数字
-
-
++ – 变成数字
-
a++、a–
-
< 、> 数字的比较和字符串的比较不同
-
!取反 把右边的数据类型转成布尔值
-
==
alert('200'+3);//输出2003
alert('200'-3);//输出197
var a='10';
a++;
alert(a);//输出11
alert('10'>9);//字符串和数字比较,进行了强制类型转换。输出true
alert('10'>'9');//输出false 两个字符串在比较时,是按其字符编码进行比较的。按每一数字位进行比较,1<9,所以为false
alert('10000'>'9');//此时,输出还是为false
alert(!'ok');//!取反 把右边的数据类型转成布尔值
alert('2'==2);//输出 true
三、NaN
定义:not a number不是个数字。不是个数字的数字类型。
所有的数字都是数字类型,但并不是所有的数字类型都是数字。数字和数字类型是两码事。
- 一旦写程序中出现了NaN,那么肯定进行了非法的运算操作。
var a=Number('abc');
alert(typeof a);//输出number,说明类型为number
alert(a);//输出NaN
- NaN的布尔值是false。
if(a){//此时输出为false。NaN转换布尔值是false
alert('真');
}
else {
alert('假');
}
- 两个NaN并不相等。Nan与自己比较时假。所有数据类型除了NaN以外,其他自己与自己比较都是真。
alert(NaN==NaN);//输出false
isNaN():is not a number 。是否不是一个数字。帮助判断某些值是不是数字。可能值true/false。内部是根据Number()进行转换,如果能够转成一个数字,那么isNaN()输出false,否则输出true。
alert(isNaN(240));//输出false
alert(isNaN('wo'));//输出true
this指向
- 定义一个函数fn1(),函数中的this指向window。此时,调用fn1()实际上相当于是window.fn1(); 因此,this指向window
function fn1(){
alert('alert2'+this);//此时提示内容为[object window]
};
//同样地,对于函数也是一样的
fn1();//实际上也就是window.fn1()
- 点击事件是已定义的函数,this指向产生点击事件的元素。
var oBtn=document.getElementById('btn1');
//点击事件是已定义的函数
oBtn.onclick=fn1;//此时提示内容为[object HTMLInputElement]
- 点击事件是匿名函数,this指向产生点击事件的元素。
var oBtn=document.getElementById('btn1');
// 点击事件是匿名函数
oBtn.onclick=function(){
alert('alert3'+this);//此时提示内容为[object HTMLInputElement]
};
- 点击事件是匿名函数,匿名函数内部调用已定义的函数fn1(),此时fn1()里面的this指向window。更通俗一点,只要遇到这样已定义的函数,里面的this都指向window。
oBtn.onclick=function(){
fn1(); //只要遇到这样调用的函数,this都是window
};