JavaScript快速入门
目录
什么是JavaScript?
JavaScript是世界上最流行的脚本语言 Javascript的历史 大部分浏览器支持es5代码,开发环境–线上环境,版本不一致
在HTML中写JavaScript
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
alert('hello');
</script>
</body>
</html>
单独写JavaScript
外部引入
<script src="js/hello.js"></script>
注释
- 内部
- 外部
//。。。
- 多行注释
/*
*
*
*
*/
基本语法入门
变量
弱类型语言
var num = 1;
var name = qiumingshan;
条件控制
if(2>1){
alert('true');
}
规则和c++一样,也允许嵌套
if(2>1){
if(3>2){
alert('3max');
}
if(scor>=60){
if(score>60&&score<70){
alert('及格');
if(score>=70&&score<80){
alert('良好');
if(score>=80&&score<90){
alert('优秀');
if(score>=90){
alert('非常优秀')
}
}
}
}
}else {
alert('不及格');
}
调试
用浏览器调试F12,进入调试,
可以在控制台,来打印
console.log(score)
相当于cout<<score<<endl;
断点
可以一步一步来看
数据类型
数值,文本,图形,音频,视频……
number: js不区分小数和整数
123//整数123
123.1//浮点数123.1
1.123e3//科学计数法
-99//负数
NaN//not a number
Infinity//表示无限大
字符串
‘abc’ “abc”
转义字符
字符串拼接:
let name = "qinjiang";
let age = 3;
let msg = 'hello,${name}';
字符串的长度
name.length
字符串的可变性,不可变,和Java,c++一样
大小写转换:
//这里是方法,不是属性了
name.toUpperCase()
name.toLowerCase()
字符串截取:
[)
name.substring(1)//从第一个到最后一个
name.substring(1,3)//[1……3)
布尔值 true,false
逻辑运算
&&
||
!
与c++或Java一样
比较运算符
=
==//等于,类型不一样,值一样,也会判断为true
====//绝对等于(类型一样,值一样,结果为true
NaN === NaN,这个与所有数字都不相等,包括它自己
null和undefined
null空 undefined未定义
数组
JS中可以是一系列不同类型的对象
var arr = [1,2,3,'hello',null,true]
- 长度
arr.length
假如给arr.length赋值,数组大小就会发生变化~
- 通过下标来取值赋值
3.slice()截取Array的一部分,返回一个新数组
也是[) 包头不包尾
- push,pop
push,尾部压入 pop,尾部弹出
- unshift(),shift()头部
unshift()头部插入,shift()尾部插入
- 排序sort arr.sort()
- 元素反转 arr.reverse()
- concat() 拼接
concat()
- 连接符号join 打印拼接数组,使用特定的字符串连接
- 多维数组
arr = [[1,2],[3,4],[5,6]];
arr[1][1];
4
对象 对象是大括号,数组是中括号
var person = {
name: "jj",
age: 18,
work: ['student','cs']
}
每个属性之间使用逗号,最后一个不需要添加逗号
var 对象名 = { 属性名: 属性值, 属性名:属性值, 属性名:属性值 }
键值对描述属性xxx :xxx,多个属性之间使用都逗号隔开,最后一个属性不加逗号
- 对象赋值
person.name = “qin”
- 使用一个不存在的对象属性不会报错
- 动态的删减属性
delete person.name
- 动态的添加
person.hhh = “hahaha”;
- 判断属性值是否在这个对象中
'age' in person //判断age是否在person中
Map和Set ES6才出来
map
let map = new Map([['tom','99'],['jake','100']]);
let name = map.get('tom');//通过get获得value
console.log(name);
set
无序不重复的集合
var set = new Set([3,1,1,1,1];//set可以去除重复
set.delete(1);
console.log(set.has(3));
iterator
var set = Set([6,7,8]);
for(let x of set){ //循环
console.log(x);
}
函数
function abs(x){
if(x>=0){
return x;
}else{
return -x;
}
}
函数中的代码将在其他代码调用该函数时执行:
- 当事件发生时(当用户点击按钮时)
- 当 JavaScript 代码调用时
- 自动的(自调用)
当 JavaScript 到达 return 语句,函数将停止执行。 如果函数被某条语句调用,JavaScript 将在调用语句之后“返回”执行代码。 函数通常会计算出返回值。这个返回值会返回给调用者:
var x = myFunction(7, 8); // 调用函数,返回值被赋值给 x
function myFunction(a, b) {
return a * b; // 函数返回 a 和 b 的乘积
}
在 JavaScript 函数中声明的变量,会成为函数的局部变量。
局部变量只能在函数内访问。
let,const,var
ES6 新增了let命令,用来声明局部变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效,而且有暂时性死区的约束。
题目1:
var a = 99; // 全局变量a
f(); // f是函数,虽然定义在调用的后面,但是函数声明会提升到作用域的顶部。
console.log(a); // a=>99, 此时是全局变量的a
function f() {
console.log(a); // 当前的a变量是下面变量a声明提升后,默认值undefined
var a = 10;
console.log(a); // a => 10
}
// 输出结果:
undefined
10
99
ES6可以用let定义块级作用域变量
在ES6之前,我们都是用var来声明变量,而且JS只有函数作用域和全局作用域,没有块级作用域,所以{}限定不了var声明变量的访问范围。 ES6新增的let,可以声明块级作用域的变量。
{
let i = 9; // i变量只在 花括号内有效!!!
}
console.log(i); // Uncaught ReferenceError: i is not defined
方法
把函数放到对象的里面,对象只有俩个东西: 属性和方法
var person = {
name: 'ymm',
birthday: 2020,
//方法
age: function(){
var now = new Date().getFullYear();
return now - this.birthday;
}
}
person.name;//属性
person.age();//方法一定要带()
日期Date
//data对象
var now = new Date();
now.getHours();
对应的年,月,日我就不再赘述
这里要说一个时间戳 电脑本地的时间可以修改,但是时间戳全世界都是统一的,
1970 .1. 1 0:00:00毫秒数
now.getTime();
//时间戳转换为时间,,1651157723736
console.log(new Date(1651157723736));
JSON对象
早期,所有数据传输习惯使用XML文件!
- JSON是一种轻量级的数据交换格式。
- 简洁和清晰的层次结构使得ISON 成为理想的数据交换语言。
- 易干人阅读和编写,同时也易干机器解析和生成,并有效地提升网络传输效率,
在JS中一切代码皆为对象,然后js支持的类型都可以用JSON来表示
格式:
- 对象都用{}
- 数组都用【】
- 所有的键值对都用key:value
JSON字符串JS对象的转化
var person = {
name: "ymm",
age: 18,
sex: 'man'
}
//对象转换为JSON字符串
var jsonPerson = JSON.stringify(person);
//JSON字符串转换为对象
var obj = JSON.parse('{"name":"ymm","age":3,"sex":"man"}');
面向对象编程,与其他语言的区别
类:模板 对象:具体的实例
可以说类是对象的抽象,对象是类的具体实现,也可以想为,女生是一个类,你的女朋友是这个大类中的具体一员
JS中: 不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类)—–es6以前是这样的。所以es5只有使用函数模拟的面向对象。
var Car = {
color: 'red',//车的颜色
wheel: 4,//车轮数量
}
var Car2 = {
color: 'blue',
wheel: 4,
}
alert(Car.color);//red
- 原始模式:这样的写法有两个缺点,一是如果多生成几个(100个!)实例,写起来就非常麻烦;二是实例与原型之间,没有任何办法,可以看出没有什么联系。
function createCar(color,wheel) {
return {
color:color,
wheel:wheel
}
}
//然后生成实例对象,就等于是在调用函数:
var cat1 = createCar("红色","4");
var cat2 = createCar("蓝色","4");
alert(cat1.color);//红色
- 原始模式的改进:通过写一个函数,解决代码重复的问题。
function createCar(color,wheel){//createCar工厂
var obj = new Object;//或obj = {} 原材料阶段
obj.color = color;//加工
obj.wheel = wheel;//加工
return obj;//输出产品
}
//实例化
var cat1 = createCar("红色","4");
var cat2 = createCar("蓝色","4");
alert(cat1.color);//红色
- 工厂模式
function CreateCar(color,wheel){//构造函数首字母大写
//不需要自己创建对象了
this.color = color;//添加属性,this指向构造函数的实例对象
this.wheel = wheel;//添加属性
//不需要自己return了
}
//实例化
var cat1 = new CreateCar("红色","4");
var cat2 = new CreateCar("蓝色","4");
alert(cat1.color);//红色
- 构造函数模式:为了解决从原型对象生成实例的问题,Javascript提供了一个构造函数(Constructor)模式。 所谓”构造函数”,其实就是一个普通函数,但是内部使用了this变量。对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上。加new执行的函数构造内部变化:自动生成一个对象,this指向这个新创建的对象,函数自动返回这个新创建的对象
ES6面向对象class继承
直接定义,以学生类举例:
class Student{
constructor(name){
this.name = name;
}
hello(){
alert('hello');
}
}
//继承
class pupil extends Student{
constructor(name,grade){
super(name);
this,grade = grade;
}
myGrade(){
alert('I am a pupil');
}
}
var xiaoming = new Student("xiaoming");
var xiaohong = new pupil("xiaohong");
xiaoming.hello();
最后
本文就到这里,由于作者能力有限,如有纰漏还请指出,不胜感激!
相关文章
- javascript html转换成markdown,如何使用Turndown使用JavaScript将HTML转换为Markdown[通俗易懂]
- JavaScript进阶内容——jQuery
- JavaScript——入门知识
- JavaScript入门笔记
- JavaScript学习总结(二十)——Javascript非构造函数的继承详解编程语言
- JavaScript学习总结(十七)——Javascript原型链的原理详解编程语言
- JavaScript中的私有成员
- JavaScript去除空格的几种方法
- javascript实现的一个图片转移效果
- javascript入门·图片对象(无刷新变换图片)滚动图像
- Javascript更新JavaScript数组的uniq方法
- JavaScript入门学习书籍推荐
- javascript对表格的行和列都能加亮显示
- JavaScript面向对象入门精简篇
- Javascript的addEventListener()及attachEvent()区别分析
- javascript移动鼠标得到单元格所在table表中的rowIndex位置[兼容ie,firefox]原创
- JavaScript高级程序设计阅读笔记(十六)javascript检测浏览器和操作系统-detect.js
- 经典Javascript正则表达式[优质排版]
- JavaScript实现表格排序方法
- JavaScript定时器详解及实例
- 利用javascript实现web页面中指定区域打印
- MongoDB中javascript脚本编程简介和入门实例
- 在JavaScript中使用timer示例
- javascript随机之洗牌算法深入分析
- 深入分析JQuery和JavaScript的异同
- JavaScript实现的内存数据库LokiJS介绍和入门实例
- Javascript中创建自定义对象的方法汇总