JavaScript 编程语言允许你在 Web 页面上实现复杂的功能。如果你看到一个网页不仅仅显示静态的信息,而是显示依时间更新的内容,或者交互式地图,或者 2D/3D 动画图像,或者滚动的视频播放器,等等——你基本可以确定,这需要 JavaScript 的参与。(js和java没有关系)

一. Javascript基本数据类型

数据类型:基本数据类型:字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined);引用数据类型:对象(Object)、数组(Array)、函数(Function),可通过typeof()检查数据类型
在js中声明变量用var来声明
在js中使用// 来表示单行注释. 使用/* */表示多行注释.

var 变量名; // 创建变量, 此时该变量除了被赋值啥也干不了. 
var 变量名 = 值; // 创建一个变量, 并且有值. 
var 变量名 = 值1, 变量名2 = 值2, 变量名3 = 值3.....; // 一次创建多个变量.并都有值
var 变量名1, 变量名2, 变量名3 = 值3;  // 创建多个变量. 并且只有变量3有值

字符串操作:

s.split()  字符串切割
s.substr(start, len)  字符串切割, 从start开始切, 切len个字符
s.substring(start, end)  字符串切割, 从start切割到end
s.length  字符串长度
s.charAt(i) 第i索引位置的字符
s.indexOf('xxx')  返回xxx的索引位置, 如果没有xxx. 则返回-1
s.includes("xxx") 判断xxx是否出现在s中. 
s.toUpperCase() 转换成大写字母
s.startsWith("xxx")  判断是否以xxx开头

二. JS条件分支,循环语句

和Java的条件分支,循环语句很像,略
三.JS中的数组和对象
在JS中创建数组:

var a = [1,2,3,4,5];
var b = new Array(1,2,3,4,5)

数组的常用操作:

arr.length;  // 数组长度
arr.push(data);  // 添加数据
arr.pop();  // 删除数据

// arr中的每一项循环出来. 分别去调用function函数, 会自动的将`数据`传递给函数的第一个参数
arr.forEach(function(e, i){  // 第二个参数是可选的
    console.log(i+"__"+e);
});
arr.join("连接符");  // 使用`连接符`将arr中的每一项拼接起来. 和python中的 "".join()雷同

在JS中创建一个对象非常容易. 和python中的字典几乎一样{ }:

var p = {
    name: "汪峰",
    age: 18,
    wife: "章子怡",
    
    chi: function(){
        console.log("吃饭")
    }
};

对象的使用:

p.name
p.age
p['wife']
p.chi()
p['chi']()

四.JS中的函数(重中之重)

函数定义

声明式函数定义:function mytest(){console.log(‘haha’)}
函数表达式定义:let fun = function(){console.log(‘haha’)}
new Function形式:var fun1 = new Function (arg1 , arg2 ,arg3 ,…, argN , body)

构造函数

使用new关键字调用的函数,最后一个位置为函数执行体,前面的位置可加形参

let sum = new Function('a', 'b', 'return a + b');
sum(1, 2)

let sayHi = new Function('console.log("Hello")');
sayHi()

function Person(){
    this.name="小明";
    this.age=18;
}
var p1=new Person();
console.log(p1, p1.name,p1.age);

有名函数

function关键字后面指定名字的,如下案例,指定函数名myNameFun

function myNameFun(a,b){
    console.log(a+b)
}
myNameFun(1, 1)

匿名函数

function关键字后面没有名字的

// 匿名函数格式
function(a,b){
    console.log(a+b)
}

自执行函数

顾名思义,就是立即自动执行的函数,有名函数和匿名函数都可以自执行,举例几个匿名函数自执行的方式如下;因为js是函数作用域,所以如果想实现某个功能又不想污染全局变量的时候可以使用自执行函数;样例见某盾core.js一个典型的实际用例,逐步调试看看就懂了

自执行方式1:变量=匿名函数(传入参数),把匿名函数赋给一个变量自执行,

// 自执行方式1
var myNamefun = function(a,b){
    console.log(a+b)
}(1,1)

自执行方式2:(匿名函数)(传入参数),样例如下

// 自执行方式2
(function(a,b){
    console.log(a+b)
})(1,1);

自执行方式3:(匿名函数(传入参数)),样例如下

(function(a,b){
    console.log(a+b)
}(1,1));

更多自执行方式详见
!function () { /* code / } ();
!(function () { /
code / } )();
~function () { /
code / } ();
-function () { /
code / } ();
+function () { /
code */ } ();

箭头函数

(参数1, 参数2, …, 参数N) => 表达式(单一)

// ES5
var x = function(x, y) {
     return x * y;
}
// ES6
const x = (x, y) => x * y;

函数的参数

显式参数(Parameters)与隐式参数(Arguments),JavaScript 函数有个内置的对象 arguments 对象,argument 对象包含了函数调用的参数数组,arguments是个类数组对象; 在调用函数时浏览器每次都会传递两个隐含的参数:函数的上下文对象this、封装实参的对象arguments

funciton test(){
	var m = arguments[0]; //第一个传入的参数
	var n = arguments[1]; //第二个传入的参数,如果只传入一个参数,那么该值为undefined
	var l = argument.length;//该值对应的函数调用时传入参数的个数
	var ll = fun.length;//该值对应的函数定义的参数个数
}

函数的特征熟悉

函数声明提前,使用function声明创建的函数,function 函数(){},会在所有代码执行前创建,可以在函数声明前提前调用;使用函数表达式即定义变量的形式创建的函数,不会被提前创建
函数也可以作为对象的属性值
函数的实参可以是任意的数据类型,可以是对象,也可以是函数
函数的返回值可以是任意数据类型,可以是对象,也可以是函数
调用函数时创建函数作用域,调用结束就销毁,在函数中要访问全局变量,可以使用window.变量