HTML 定义了网页的内容
CSS 描述了网页的布局
JavaScript 网页的行为
JavaScript是一种面向对象的编程语言(可以在网页上实现复杂的功能交互等),属于解释型语言。
在客户端运行(写在DIV和CSS之间,辅助网页制作)
*在服务器端运行的是比如Node.js
内部的JS: //注意文件名是xxx.js,通常放在body的最后面,即前
内联JS:Click me //不推荐
类型、变量、运算符、控制结构(if,for,switch,while语句)、对象、数组、函数、闭包
Java Script中的数据类型分为6种,两类:简单数据类型和复杂数据类型。
简单数据类型包括 Number、Undefined、Null、Boolean 、String。
复杂数据类型是Object。
console.log(0.1 + 0.2); //输出结果为0.30000000000000004
//*在js中不区分整数型和浮点数型,只要加了小数点都算浮点型。因此默认都算浮点数(双精度64位格式)
//使用数学运算时用到方法:Math打点,如Math.sin(3),Math.PI等
//字符串
console.log("hello".length);
console.log("hello".charAt(0)); //截取字符串指定位置字符,从0开始计数
console.log("hello,world".replace("hello", "night")); //替换指定字符
console.log("hello,world".toUpperCase()); //让字符串变成大写
console.log("hello,world".toLowerCase()); //让字符串变成小写
//布尔:ture & false
var name = "zhangsan";//新建变量
let name2 = "lisi";
console.log(name);
变量作用域:
var没有作用域,即使在ifelse语句里定义,一样可以被外部代码访问
而let与var的区别:let是有作用域的,语句块内let定义的变量无法被外部代码使用
——推荐使用let,尽量不要使用var
&&、||、!、++、–等
x += 5;
x = "3" + 4 + 5;//输出结果:345。在字符串后加数字,后续默认转化为字符串执行
x = 3 + 4 + "5";//输出结果:75。会先计算3+4,再同字符串相加
console.log(123 == "123");//输出结果:true。“==”因为有类型自动转换,最终比较的是“123”和“123”
console.log(123 === "123");//输出结果:false。“===”不会进行类型转换,直接将数字和字符进行对比
var allowed = age >= 18 ? "Yes" : "No";//三元运算符
//if else
var name = "Simon";
if (name == "Simon") {
console.log("Simon");
}
else if (name == "Jhon") {
console.log("John");
}
else {
console.log("Stranger");
}
//while、do while
var a = 19;
while(a==1){
}
do {
a++;
console.log(a);
} while (age == a) //先运行一次do里的内容再进行判断
//for
for (let i = 0; i < 5; i++) {
age++;
console.log(age);
}
//switch case
switch (name) {
case "Simon": console.log("Simon"); break;
case "Jhon": console.log("Jhon"); break;
default: console.log("Stranger"); break;
}
var obj = new Object();
var obj2 = {
}; //两种声明方法
obj = {
oname: Simon,
oage: 20,
omail: "[email protected]",
contact: {
phone: "123456",
telegram: "@Simon"
}
}
console.log(obj.contact.phone);
console.log(obj["contact"]["phone"]);//两种应用方法都可
obj.contact.wechat = "abcd";//新增wechat属性
var a = new Array();
var b = {
}; //两种声明方法
a[0] = "Simon"; //通过[]访问数组元素,给数组赋值。
a[1] = "Jhon";
a[4] = "Moby"; //未被赋值的元素如a[2],访问时是undefined状态(此时数组length为5,empty属性元素为2)
b = ["Simon", "Jhon", "Moby"]; //第2种赋值方法,此时数组length为3,无empty
b.push("Json"); //追加数组元素
b.unshift("Ruby"); //在数组开头插入元素
b.pop(); //删除末尾元素
b.shift(); //删除头元素
b.reverse(); //倒序排列数组
//数组遍历
//for和for in区别:for会访问到a[]内undefine的元素输出,for in不会。
for (let i = 0; i < b.length; i++) {
console.log(a[i]);
}
for (let i in b) {
console.log(a[i]);
}
let m = 1;
function add(x) {
m += x;
}
add(16); //传参,执行方法
//传入任意长度的参数,进行求和并输出。arguments代表传入的参,是个任意长度的集合
function getSum() {
let sum = 0;
for (let i = 0, j = arguments.length; i < j; i++){
sum += arguments[i];
}
return sum;
}
let sum = getSum(1, 2, 3, 4, 5, 6, 7, 8, 9);
//返回的不是值而是函数。调用后返回一个函数,等待下次传入参数再得出结果。
function makeAdder(a) {
return function (b) {
return a + b;
};
}
var x = makeAdder(5); //传入a,此时x是一个方法,相当于return function (b) {return a + b;};的部分
var s=x(6);
我的理解是这样的,一个复杂的functionC一般会由多个更简单的function组成,而这些简单fanction之间的关系可能是这样的:一个functionA能够表达的前提 是以另一个functionB的完成为基础。那么functionB就叫回调函数,functionA叫高阶函数,functionC叫组合函数。for example:functionC:穿新衣服参加婚礼,functionB:买新衣服&&有人举行婚礼 functionA:参加婚礼。functionB通过返回新衣服和婚礼,来提供fuctionA行动的前提。所以:functionB是functionA的回调函数。)