首先,javascript与java没有一点点关系,它只是创作者为了蹭Java热度才被叫成JavaScript。
js基础
数据类型
数字:整数、浮点数 当数字做出错误的运算后,得出的结果为NaN。
字符串:单引号、双引号
布尔型 true、false
null型:null
undefined 型:undefined
想要知道对象的类型,可以用typeof()方法。
就undefined类型举例
function test(){
var foo = undefined
console.info(foo)
}
test();
执行后会在控制台输出undefined
。
变量作用范围
js默认情况下,变量以函数为范围。
变量加var与不加var的区别:前者是局部变量,后者是全局变量。
function test(){
var foo = undefined
console.info(foo)
foo1 = 'zhangsan'
}
test();
console.info(foo1)
执行后会在控制台会输出foo1的内容。
常量
常量一旦赋值,就不能再修改。
const varName;
function test(){
const PI = 3.1415926;
PI = 1
}
test();
执行后会报错TypeError: invalid assignment to const `PI'
。
函数
定义方式:
- function funName(){}
- function funName(){} var varName = funName
- var varName = function(){}
闭包
函数嵌套函数。内部的函数,可以使用外部函数的变量。
function outter(){
var a = "outter"
function inner(){
var a = "inner"
console.info(a)
}
return inner;
}
console.info(outter()())# 由于外层函数返回内层函数的地址,所以后面还得加一个括号才能执行内层函数。
输出为‘inner’
数组
一组数据的列表。var arr = [] var arr = arrary(14,5,2)
在JS中,一切皆对象,这就意味着一切都有对应的方法。
正则表达式对象
JS的正则表达式与Python的差不多,不过JS的正则表达式两端须用/
括起来
举例:
var reg = /^1\d{10}$/
var reg = /^1\d{10}$/
console.info(reg.test("18222203832"))
var name = 'zhangsan'
var nameReg = /ZHANG/i
console.info(nameReg.test(name))
输出都为true
。其中的i表示匹配时忽略大小写。
顺序结构、分支结构、循环结构
JS的结构与Python的相似,下面仅简单描述
分支结构
if-else语句
var a = 10;
var b = 20;
var c = 30;
var max = -Infinity;
if (a > b) {
max = a;
} else {
max = b;
}
if (max < c) {
max = c;
}
console.info(max)
三目表达式
expr ? expr1 : expr2
三目表达式可以更加简单地实现比较大小。
max1 = (a>b?a:b)>c?(a>b?a:b):c;
console.info(max1)
switch语句
a = 2;
switch(a){
case 1:
console.info("1111");
break;
case 2:
console.info("2222");
break;
case 3:
console.info("3333");
break;
default:
console.info("default");
}
循环
for in结构
var arr = [1, 2, 3, 4, 5, 6, 7]
for(i in arr){
console.info(arr[i])
}
for结构
var arr = [1, 2, 3, 4, 5, 6, 7]
for (var i = 0;i < arr.length; i++){
console.info(arr[i])
}
while结构
var i =0;
while(i < arr.length){
console.info(arr[i])
i++;
}
do-while结构
var i = 0;
do{
console.info(arr[i])
i++;
}while(i < arr.length);
break与continue
for (var i =0; i < 10000; i++){
if (i % 2 == 0){
continue;
}
console.info(i)
}
JS面向对象
单例
var student = {
name:"zhangsan",
age:29,
sayHello:function(){
//this.方法的调用者
console.info(this.name)
}
}
student.sayHello();
获取对象属性的方式有两种,拿age
属性举例
console.info(student.age)
console.info(student['age'])
原型链
先用以下方式创建对象。
function Student(name,age){
this.name = name;
this.age = age;
this.sayHello = function(){
console.info(this.name + "说:hello!")
}
}
var s1 = new Student("盖伦", 100);
s1.sayHello();
每创建一个对象,都会用一块内存存放sayHello函数,对象多了,就会造成内存的浪费。
可以改用以下方式
function Student(name,age){
this.name = name;
this.age = age;
}
Student.prototype.sayHello = function(){
console.info(this.name + "说:hello!")
}
var s1 = new Student("盖伦", 100);
s1.sayHello();
prototype为Student的原型,将sayHello存入原型中,创建对象不会用额外的内存存储sayHello,可大大节省内存。
当对象调用属性时,如果自身无此属性,会去原型上找,而原型无此属性时,会从原型的原型上找
function Person(name,age){
this.name = name;
this.age = age;
}
Person.prototype.shuo = function(){
console.info("hello world")
}
function User(uname){
this.uname = uname;
}
/*将User的原型定为Person*/
User.prototype = new Person("张胜")/*可以没有参数*/
var u = new User('admin')
console.info(u['name'])
u.shuo()
箭头函数
与匿名函数类似
var a = v => v + 2;
console.info(a(5))
var a = (v,h) => v + h;
console.info(a(5,6))
类
class Person{
constructor(name){
this.name = name;
}
}
继承
class User1 extends Person{
}
模板字符串
模板字符串两端须用点(键盘左上角的键)括住,而不是单引号。
var name = "张三";
var age = 20;
var instroduce = `
my name is ${name},my age is ${age}
`;
console.info(instroduce)