JavaScript起源:
是由Netscape公司(网景)发明的,它是一种描述性语言,与java语言没什么关系,只是在结构和语法上与Java类似,与当初的sun公司是一个联盟,所以起名Javascript。javaScript作为一个草案提交 给ECMA(欧洲计算机制造商协会),该协会发布了名为ECMAScript的全新脚本语言(ES6),es6是新标准一些老版本的浏览器可能不支持。
1)Javascript环境搭建:
1、在浏览器中嵌套编写运行,写在html页面中
2、脱离浏览器运行,需要安装node.js这个运行环境,再安装一个javascript的ide工具如:webstorm
2)Javascript的标识符和关键字:
标识符:就是给变量、函数和对象指定的名字
1、javascript语言是区分大小写的
2、标识符的首字符以下划线(_)、美元符号($)、或者字母开头,不能以数字开头
3、标识符中其它字符可以是下划线、美元符号、字母或者数字组成,标识符也可以是汉字
关键字:
系统定义好的关键字
3)常量和变量:
常量定义:const NUM=100;
变量:var score=0.0;
或者(ES6中新增加的)let x=10,y=true; (弱类型语言,申明的时候不需要指定变量类型)
var s = 'Hello word.';
console.log(s);
const NUM = 101;
console.log(NUM);
var x = 111, y = 10;
console.log(x);
console.log(y);
let和var的区别:
1、变量提升
console.log(a);
var a='123'; //输出:undefined
console.log(b);
let b='321' //报错
2、作用域:
var声明的变量,它的作用域是全局的
let声明的变量,它的作用域是在一个块。
for (var n=0;n<3;n++){
console.log(n);
}
console.log("n= "+n); //n= 3
for (let i=0;i<3;i++){
console.log(i);
}
console.log("i= "+i); //报错i没有定义
4)注释:
单行注释://
多行注释:/*......*/
5)javascrip的数据类型:数值类型、布尔类型、字符串类型、对象类型、数组类型5种(另一个教程中说是6种类型:原始类型5种:number、string、boolean、null、undefined,对象类型1种(object):Function、Array、Date...等)
数值类型:包括整数和浮点数
整数:十进制、十六进制(0x开头)、八进制(0开头)
浮点数:必须包含一个数字、一个小数点或"e"("E")
var num=10,num1=0xA,num2=010;num3=1.2e10,num4=2E-10;
console.log(num);
console.log(num1);
console.log(num2);
console.log(num3);
console.log(num4);
运行结果:
10
10
8
12000000000
2e-10
布尔类型:有两种值true和false
字符串类型:封装在双引号或者单引号之间
var s1='hello word';
var s2="hello word!";
console.log(s1);
console.log(s2);
对象类型:
用new生成一个新的对象,创建一个对象:
var currentDay=new Data();
console.log(currentDay);
数组类型:
数组类型Array也是一个对象,可以通过var arr=new Array(3)语句来创建,3是指数组元素个数是3
var ary=new Array(3);
console.log(ary); //输出[ <3 empty items> ]
console.log(ary[0]);//输出undefined
console.log(ary.length);//输出长度为3
6)数据类型字面量:
数据类型字面量:是在程序中使用的字符表示(某种数据类型如何写出来)
整数:12
浮点数:1.2
字符串:“hello world”
布尔类型:true\false
对象:{height:10,width:20}
数组:[1,2,3,4,5]
不存在的对象:null
7)数据类型转换:
1、转换成字符串 :使用tostring()方法,一个参数表示要转换成的进制
var found=10
console.log(found.toString(2)); //转换成二进制
console.log(found.toString(8));
console.log(found.toString());
console.log(found.toString(16));
运行结果:
1010
12
10
a
2、转换成数字;使用parseInt(),parseInt第一个参数表示要转换的值,第二个字符串表示转换成什么进制;parseFloat()转换成浮点类型
var num=parseInt('10',2);
var num1=parseInt('AF',16);
var num2=parseInt('AF',2);
var num3=parseFloat("1000.033DFS");
var num4=parseFloat("1.2E10");
console.log(num);
console.log(num1);
console.log(num2);
console.log(num3);
console.log(num4);
运行结果:
2
175
NaN //表示没有意义
1000.033
12000000000
3、强制类型转换:三种:Boolean(value)\Number(value)\String(value)
Boolean()
var b=Boolean("");
var b1=Boolean("122");
var b2=Boolean(0);
var b3=Boolean(1);
var b4=Boolean(null);
var b5=Boolean({"height":1});
var b6=Boolean({});
console.log(b);
console.log(b1);
console.log(b2);
console.log(b3);
console.log(b4);
console.log(b5);
console.log(b6);
运行结果:
false
true
false
true
false
true
true
Number():
var c=Number(false);
var c1=Number(true);
var c2=Number(undefined);
var c3=Number(null);
var c4=Number("1.2");
var c5=Number("1.2.3");
var c6=Number({"height":18});
var c7=Number(50);
console.log(c);
console.log(c1);
console.log(c2);
console.log(c3);
console.log(c4);
console.log(c5);
console.log(c6);
console.log(c7);
运行结果:
0
1
NaN
0
1.2
NaN
NaN
50
String():
var c=String(false);
var c1=String(true);
var c2=String(undefined);
var c3=String(null);
var c4=String(1.2222);
var c5=String("1.2.3");
var c6=String({"height":18});
var c7=String(50);
var c8=String([1,2,3]);
console.log(c);
console.log(c1);
console.log(c2);
console.log(c3);
console.log(c4);
console.log(c5);
console.log(c6);
console.log(c7);
console.log(c8);
运行结果:
false
true
undefined
null
1.2222
1.2.3
[object Object]
50
1,2,3
8)运算符:算术运算符、关系运算符、逻辑运算符、位运算符(操作符的优先级:算术操作符 → 关系运算符 → 逻辑操作符 → "="赋值符号)
算术运算符分为一元运算符和二元运算符:
一元:取反(-)、自加一(++)、自减一(--)
二元:加、减、乘、除
算术赋值运算符:+=、-=、*=、/=、%=
关系运算符:==(值相同即可)、!=、>、<、>=、<=、===(绝对等于:值相同,数据类型相同)
逻辑运算符:&、|、!、^(异或:两个值相反才返回true)、&&、||
|(逻辑或)与||(短路或)的区别:短路或(||),前面的表达式确定为真就不计算后面的表达式了;逻辑或(|):前面的表达式确定为真了也会计算后面的表达式。(这样导致||和&&的效率更高,一般都用这两)
逻辑或:(|)
var a=10;
var b=20;
var i=0;
if ((a<b)|(i++==1)){
console.log("true");
}else{
console.log("false");
}
console.log("i="+i);
运行结果:
true
i=1
短路或(||)
var a=10;
var b=20;
var i=0;
if ((a<b)||(i++==1)){
console.log("true");
}else{
console.log("false");
}
console.log("i="+i);
运行结果:
true
i=0
&(逻辑与)与&&(短路与)的区别:与|和||的区别是一样的;
位运行:~、&、|、^、>>、>>>、<<
9)三元运算符:x?y:z; 如果x为真就执行y,如果x为假就执行z
赋值运算符(等号:=)
对象类型判断运算符instanceof
10)typeof和instanceof的区别
var a="zhangqian";
var b=true;
var c=10;
var d;
var e=null;
var f=new Object();
/*typeof返回一个变量的基本类型*/
console.log(typeof a); //string
console.log(typeof b); //number
console.log(typeof d); //undefined
console.log(typeof e); //object
console.log(typeof f); //
/*instanceof:判断一个实例是否属于一个类*/
var array=new Array();
var object=new Object();
var regexp=new RegExp();
function func(){};
var func1=new func();
console.log(array instanceof Array); //true
console.log(object instanceof Object); //true
console.log(regexp instanceof RegExp); //true
console.log(func1 instanceof func); //true
console.log(f instanceof func);
console.log(f instanceof Object);