JavaScript基础

231 阅读4分钟

JavaScript

一、JavaScript语言特点

  • JavaScript是基于对象和事件驱动的(动态的)
  • JavaScript是跨平台的

二、JavaScript的变量

1、定义变量

var name = "jack";
let age = 20;
const isMan = true;

var的作用范围可以跨块级,类似在if里的属性用到外面的属性值 let定义的值可以重新赋值 const定义的值不能再次赋值,常量,需要初始化

2、变量类型

  • undefined - 如果变量是 Undefined
  • 类型的boolean - 如果变量是 Boolean
  • 类型的number - 如果变量是 Number
  • 类型的string - 如果变量是 String
  • 类型的object - 如果变量是一种引用类型或 Null 类型的

3、字符串

字符串和其他类型属性一起使用时,通常使用的是字符串拼接

console.log('My name is ' + name + 'and my age is' + age);

es6后出现类似于占位符方式,开发更为高效 注意使用的是反引号 '`` ' 包裹字符串

console.log(`My name is ${name} and my age is ${age}`);

输出结果

3.1、字符串的属性和方法

  • length属性
    注意:属性没有括号
const str = 'hello world';
console.log(str.length);    //11
  • toUpperCase() 方法
console.log(str.toUpperCase()); //HELLO WORLD

其他属性和方法查阅文档 www.w3school.com.cn/

4、数组

4.1 、创建数组

const names = new Array('a','b','c',5);
const names2 = ['a','v',20];

注意:数组可以存放不同类型的数据

4.2、末尾追加数据

const names = new Array('a','b','c',5);
names.push('c');

4.3、向开头添加数据

const names = new Array('a','b','c',5);
names.unshift('c');

4.4、去除最后一项

const names = new Array('a','b','c',5);
names.pop();

4.5、获取指定值的索引

const names = new Array('a','b','c',5);
names.indexOf('a');

三、JavaScript对象

1、对象字面量

const person = {
    firstname:'Jack',
    lastName:'An',
    age:30,
    hobbies:['aa','bb','cc'],
    address:{
        street:'abc',
        city:'hn'
    }
}

console.log(person);

输出结果

2、数组对象

const person = [
    {
        id:1,
        name:'a',
        age:20
    },
    {
        id:2,
        name:'b',
        age:20
    },
    {
        id:3,
        name:'c',
        age:20
    }
]

转为JSON

const person = [
    {
        id:1,
        name:'a',
        age:20
    },
    {
        id:2,
        name:'b',
        age:20
    },
    {
        id:3,
        name:'c',
        age:20
    }
]

const toJSON = JSON.stringify(person);
console.log(toJSON);

输出结果

四、JavaScript的循环语句

1、for循环数组

for(let i = 0; i < person.length; i++) {
    console.log(person[i]);
}

输出结果

//使用for of效果相同
for(let one of person) {
    console.log(one)
}

2、for each

person.forEach(function(one){
    console.log(one);
});

3、for map

返回值是一个数组

const personTest = person.map(function(one){
    return one;
});
console.log(personTest);

输出结果

4、for filter

const personTest = person.filter(function (one{
    return one.id;
});

配和map使用可以筛选指定条件的值,就是所谓的函数编程

const personTest = person.filter(function (one{
    return one.id === 1;
}).map(function(one){
    return one;
});
console.log(personTest);

输出结果

五、JavaScript的条件语句

1、if

const i = '10';
if(i == 10) {
    console.log(`i=10`);
}   //true

注意:这里的==相当于两个值都作为字符串来作比较,也就是说,当i的值为字符串10,结果也是true。 若想连类型也一起比较就要使用===(绝对等于)

if(i === 10) {
    console.log(`i=10`);
}   //false

2、三元运算符

const i = 10;
const result = i > 10 ? 'y' : 'n';
console.log(result);

3、switch

const i = 10;
switch (i) {
    case 5:
        console.log(5);
    case 10:
        console.log(10);
    default:
        console.log("other"); 
}

六、JavaScript的函数

1、function

function add(num1, num2){
    return(num1 + num2);
}
console.log(add(1020));

2、箭头函数

箭头函数更为简洁,并且不需要写返回值

const add = (num1, num2) => num1 + num2;
console.log(add(1020));

七、JavaScript面向对象

1、函数对象

//定义函数对象
function Person(name,age,birthday){
    this.name = name;
    this.age = age;
    this.birthday = new Date (birthday);
}
//实例化对象
const person1 = new Person('jack','12','2001-01-02')
console.log(person1);

2、类

//定义类
class Person{
    constructor(name,age,birthday){
        this.name = name;
        this.age = age;
        this.birthday = new Date (birthday);
    }
    //类中增加方法(类中叫方法,不在类中叫函数)
    //获取年
    getBirthdayYear(){
        return this.birthday.getFullYear;
    }
    //获取名字
    getName(){
        return `${this.name}`;
    }
}
//实例化对象,调用方法
const person1 = new Person('jack','12','2001-01-02')
console.log(person1);
console.log(person1.getName());

输出结果

八、DOM(文档对象模型)

DOM是把html里面的各种数据当作对象进行操作的一种思路。 比如一个超链,作为一个DOM对象,就可以使其隐藏,修改其href指向的地址。

1、节点

DOM把所有的html都转换为节点

1.1、获取节点

从DOM中选择元素

<form id="my-form">
        <h1>Add user</h1>
        <div class="msg"></div>
        <div>
            <label for="name">Name:</label>
            <input type="text" id="name" />
        </div>
        <div>
            <label for="email">Emain:</label>
            <input type="text" id="name" />
        </div>
        <input type="submit" value="Submit" />
    </form>   
 <ul class='items'>
        <li class="item">a</li>
        <li class="item">b</li>
        <li class="item">c</li>
        <li class="item">d</li>
    </ul>

<script>
    //元素选择器
    console.log(document.getElementById('my-form'));
    console.log(document.querySelector('h1'));
    //多元素选择器
    console.log(document.querySelectorAll('.item'));
</script>

输出结果

<script>
    //遍历节点元素
    const items = (document.querySelectorAll('.item'));
    items.forEach((item) => console.log(item));
</script>

1.2、操作节点

    //遍历节点元素
    const ul = document.querySelector('.items');
    //删除所有元素
    // ul.remove();
    //删除最后一个元素
    //ul.lastElementChild.remove();
    //改变第一个元素的值
    // ul.firstElementChild.textContent = 'hello';
    //获取第二个元素并改变html值
    //ul.children[1].innerHTML = '<h1>abc</h1>';
    //改变btn按钮的背景颜色
    const btn = document.querySelector('.btn');
    btn.style.background = 'red';

2、事件

const btn = document.querySelector('.btn');
    //创建单击监听事件
    btn.addEventListener('click',(e) =>{
        //阻止提交按钮的默认行为
        e.preventDefault();
        console.log('单击');
    });

当点击了提交按钮控制台就会输出语句

九、DOM小案例

通过表单提交,获取表单上的数据,并添加到页面元素上

<body>
    <form id="my-form">
        <h1>Add user</h1>
        <div class="msg"></div>
        <div>
            <label for="name">Name:</label>
            <input type="text" id="name" />
        </div>
        <div>
            <label for="email">Emain:</label>
            <input type="text" id="email" />
        </div>
        <input class="btn" type="submit" value="Submit" />
    </form>
    <ul id="users"></ul>
    <!-- <ul class='items'>
        <li class="item">a</li>
        <li class="item">b</li>
        <li class="item">c</li>
        <li class="item">d</li>
    </ul> -->
</body>
<script src="main.js"></script>
<script>
    const myform = document.querySelector('#my-form');
    const email = document.querySelector('#email');
    const name = document.querySelector('#name');
    const msg = document.querySelector('.msg');
    const users = document.querySelector('#users');
    //监听表单提交
    myform.addEventListener('submit', onSubmit)
    function onSubmit(e{
        //阻止提交默认行为
        e.preventDefault();
        //表单校验,只有两个选项都填了才能提交
        if (name.value === '' || email.value === '') {
            //使用msg变量显示错误
            msg.innerHTML = '请输入name和Email';
            //提示三秒后消失
            setTimeout(()=> msg.remove(),3000);
        } else {
            //输入了用户名和邮箱就给ul列表增加列表项
            //创建变量li
            const li = document.createElement('li');
            //插入节点
            li.appendChild(document.createTextNode(`${name.value} : ${email.value}`));
            //将li插入ul
            users.appendChild(li);
            //清空输入框
            name.value = '';
            email.value = '';
        }
    }
</script>

运行效果