目录

JS简介

全称JavaScript但是与Java一毛钱关系都没有 之所以这么叫是为了蹭Java的热度
原javaScript公司想改名EECMAScript后面倒闭了,取名这件事就随便了 它是一门前端工程师的编程语言 但是它本身有很多逻辑错误(不是很严谨) 前端想一统天下:node.js
node.js 可以让js跑在服务器 JS发展史>>>:JavaScript很容易学习

JS基础

1.注释语法

// 单行注释
/*多行注释*/

2.引入js的多种方式

  1. head内script标签内编写
  2. head内script标签src属性引入外部js资源
  3. body内最底部通过script标签src属性引入外部js资源(最常用)

ps:注意页面的下载是从上往下的 所以操作标签js代码一定要等待标签加载完毕再执行才可以正常运行

3.结束符号

分号(很多时候不写也没问题)

  1. python中是没有结束符的
  2. SQL中结束符是分号
  3. js结束符是分号 但很多时候不写分号也没事 写分号解释器可能会稍作停顿一下 不写分号就会一路执行

变量与常量

"""
1.pycharm创建js文件或者html文件(适合编写较为复杂的js代码)
2.浏览器提供编写js代码的环境
"""
在js中声明变量需要使用关键字
var
var name = 'jason';
let
let name = 'tony';
ps:let是ECMA6新语法 可以在局部定义变量不影响全局
在js中声明常量也需要使用关键字
const
const pi = 3.14;
补充:
javascript是动态类型 所以 不需指定数据类型
很多语言申明变量都要把类型放后面
编程语言的区别:值传递和引用传递
变量名绑定内存地址 地址指向内存中的某块空间

let和var的区别

以python举例,python的for循环是全局名称空间:



全局变量i会因为for循环而变成9。

javascript var定义的变量会出现和python一样的情况

let定义的变量 在for循环中就不会出现这种情况

在javascrpit中使用for循环验证:

var定义i的变量 全局有效 重名的情况下 会被for循环修改:

let定义的变量局部有效,不影响全局!

浏览器提供的终端如何换行?

shift+enter

申明常量 const

const申明的值不能修改:

严格模式 use strict

在javascript代码的开头添加以下字符串开启严格模式:

'use strict';

严格模式下你不能使用未声明的变量。

基本数据类型

值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、Symbol。

引用数据类型(对象类型):对象(Object)、数组(Array)、函数(Function),还有两个特殊的对象:正则(RegExp)和日期(Date)。

javascript一切皆对象

在JS中查看数据类型的方式 typeof

1.数值类型(Number)

在JS中整型与浮点型不分家 都叫Number

虽然没有整型和浮点型一说 都叫Number但是在转换的时候可以转:



转不了的时候不会报错 而是报NAN:



NaN也属于数值类型 意思是:不是一个数字(Not A Number) 其实本质是报错了 提示你操作的不是一个数字

2.字符类型(String)

  1. 单引号 'jason'

  2. 双引号 "jason"



    单引号、双引号可以创建字符串 而三引号不行。

  3. 模板字符串:

    3.1 可以放多行文本

    3.2 支持格式化输出(ECMA6新语法)(使用${变量})

  4. 字符串拼接推荐使用加号

    python不推荐使用+号拼接字符串 而是推荐join方法 其他语言一般都推荐使用+号

字符类型内置方法(重要)

学会对比学习 python中肯定有重复的方法

JavaScript 说明 python
.length 返回长度 len()
.trim() 移除空白 strip()
.trimLeft() 移除左边的空白 lstrip()
.trimRight() 移除右边的空白 rstrip()
.charAt(n) 返回第n个字符 索引取值
.concat(value, ...) 字符串拼接 字符串相加
.indexOf(substring, start) 子序列位置 index() 、find()
.substring(from, to) 根据索引获取子序列 切片
.slice(start, end) 切片(左开右闭) 切片
.toLowerCase() 小写 lower()
.toUpperCase() 大写 upper()
.split(delimiter, limit) 分割 split()



spilt方法的补充说明:



1表示要分割之后产生列表中的1个元素。

ps:想要清空之前终端的代码 刷新页面 解释器会重置

对于字符串的操作都是,产生一个新的字符串,原来的字符串没有改变

3.布尔类型(Boolean)

JS里面的布尔值与Python不同

JS是纯小写的bool 而Python是首字母大写Bool



javascript中有5个值强制转换为bool类型的结果为false,分别是:

0 ,' ' , undefind, null,NaN

null与undefined的区别

null表示值为空(曾经拥有过) undefined表示没有定义(从来没有过)



再来一个例子!:



d2被申明了还没复制是undefined 赋值之后就无法回到undefined了

4.对象(object)

对象之数组(Array)

类似于python中的列表
let l1 = []

对象内置方法(重要)

方法 说明 python
.length 数组的大小 len()
.push(ele) 尾部追加元素 .append()
.pop() 获取尾部的元素 .pop()
.unshift(ele) 头部插入元素 .insert()
.shift() 头部移除元素 .pop()
.slice(start, end) 切片 切片
.reverse() 反转 reverse()
.join(seq) 将数组元素连接成字符串 .join()
.concat(val, ...) 连接数组 .extend()
.sort() 排序 .sort() .sorted()
.forEach() 将数组的每个元素传递给回调函数 map()
.splice() 删除元素,并向数组添加新元素。 ???
.map() 返回一个数组元素调用函数处理后的值的新数组 map()

forEach相当于for循环把数据拿出来 交给函数执行:



两个形参的情况:第二个形参是相当于元素的位置



三个新参:第三个新参是调用forEach的列表

foreach与map的区别:

1.相同点,都是循环遍历数组中的每一项;匿名函数中的this都是指向window。

2.不同点,map()会分配内存空间存储新数组并返回,forEach()不会返回数据;forEach()允许callback更改原始数组的元素。

splice删除元素:



l1.splice(0,3)表示删除索引位置0、1、2的数(遵循切片规则:左开右闭)

所以还剩下[44, 55]

先删后加:



map 映射:

例子1:



例子2:

对象之自定义对象(Object)

类似于python的字典 如下实创建自定义对象的两种方式:
let d1 = {'name':'jason',}
let d2 = new Object();

JavaScript中的自定义对象,既支持中括号取值,又支持用点取值。python中的字典则不支持用点取值!



javascript把内置函数 自定义对象放一起了都用new:

运算符

1.算术运算符 先赋值还是先自增?

+ - * / % ++(自增1) --(自减1)
var x=10;
var res1=x++; 加号在后面 先赋值后自增
var res2=++x; 加号在前面 先自增后赋值

2.比较运算符

*" !== " 严格不相等," != "松散不相等 (会执行强制类型转换)*
!=(值不等 弱) ==(值相等 弱)
===(值相等 强) !==(值不等 强)
ps:会不会自动转换类型

1.强制类型转换

  • 当使用加号进行运算时,会将数字强制转换为字符串,然后再进行运算。
const year = '1991';
console.log(year + 18);
console.log(typeof(year + 18));

将代码放入控制台执行,可得知结果是字符串'199118'。

  • 当使用减号进行计算时,会将字符串强制转换为数字,再进行运算。
let data = '23'-'10'-3
console.log(data)
console.log(typeof(data))

将代码放入控制台执行,可得知结果是数字10。

  • Number函数
const name = 'jonas'
console.log(Number(name))
console.log(typeof Number(name))

Number函数可以将字符串转换为数字类型,如上Number(name)的输出结果为NaN。NaN也属于数字类型。

2.区分 " ===" 和 " == "

三等号被称为严格相等运算符,它不执行强制类型转换,只有当两个值完全相同时,才会返回 true。

双等号是松散相等运算符,当等号两边类型不同时,它会先进行强制类型转换,再进行比较。

3.逻辑运算符

&&(与)	||(或)  !(非)

const a = true;
const b = false;
console.log(a && b);
console.log(a || b);
console.log(!a);

流程控制

1.单if分支

if (条件){
条件成立执行的代码
}

2.if...else分支

if(条件){
条件成立执行的代码
}else{
条件不成立执行的代码
}

3.if...else if...else分支

if(条件1){
条件1成立执行的代码
}else if(条件2){
条件1不成立条件2执行的代码
}
else{
条件1和2都不成立执行的代码
}

4.switch语法

如果分支结构中else if很多还可以考虑使用switch语法。

switch(条件){
case 条件1:
条件1成立执行的代码;
break; 如果没有break会基于某个case一直执行下去
case 条件2:
条件2成立执行的代码;
break;
case 条件3:
条件3成立执行的代码;
break;
case 条件4:
条件4成立执行的代码;
break;
default:
条件都不满足执行的代码
}

每个case都要加break 如果没有break那会基于某个case继续执行 不会再根据case后面的值 而决定是否执行。



你会发现,每个case语句下的子代码都执行了。

for循环

位运算 for循环拿出来的是数字 ascii对应的数字

for(起始条件;循环条件;条件处理){
循环体代码
}
for(let i=0;i<10;i++){
console.log(i)
}
let dd = {'name':'jason','age':18}
for(let k in dd){
console.log(k)
}

while循环

while(循环条件){
循环体代码
}

三元运算符

相当于if else结构的简洁形式。如果 ?之前的条件满足,将会执行问号之后的代码。

如果不满足,则会执行冒号之后的代码

const age = 23;
age >= 18 ? console.log('成年'):
console.log('未成年') const drink = age >= 18 ? '可以喝酒' : '可以喝水' ;
console.log(drink); """
三元运算
python中: 值1 if 条件 else 值2
JS中: 条件?值1:值2
"""

函数

函数定义

"""
python中函数的定义
def 函数名(形参):
'''函数注释'''
函数体代码
return 返回值 Javascrpit不需要考虑缩进问题!!
""" function 函数名(形参){
// 函数注释
函数体代码
return 返回值
}

匿名函数

var s1 = function(a, b){
return a + b;
}

通用函数和匿名函数之间的区别

对于通用函数我们可以在函数声明之前,调用函数:

/* 通用函数 */

Function_name('通用函数');
function Function_name (key){
return key;
}

对于匿名函数则不能这么做:

/* 匿名函数 */

console.log(box('匿名函数'))  /* 会报错 */
const box = function(key){
return key;
}

箭头函数

跟python lambda函数相似 形参=>返回值

var f = v => v;
var f = function(v){
return v;
} var f = () => 5;
var f = function(){return 5}; var sum = (num1, num2) => num1 + num2;
var sum = function(num1, num2){
return num1 + num2;
}

javascript函数特性

  1. JS中函数的形参与实参个数可以不对应

    传少了就是undefined 传多了不用

  2. 函数体代码中有一个关键字arguments用来接收所有的实参



    使用argments:

  3. 函数的返回值如果有多个需要自己处理成一个整体

  4. 作用域的例子



    例子2:

  5. 闭包函数

内置对象

日期对象 Date()

var d = new Date();
//getDate() 获取日
//getDay () 获取星期
//getMonth () 获取月(0-11)
//getFullYear () 获取完整年份
//getYear () 获取年
//getHours () 获取小时
//getMinutes () 获取分钟
//getSeconds () 获取秒
//getMilliseconds () 获取毫秒
//getTime () 返回累计毫秒数(从1970/1/1午夜)

Date相当于python中的结构化时间:

序列化 JSON()

let dd = {name: 'jason', age: 18}
JSON.stringify(dd) 序列化
JSON.parse(ss) 反序列化

正则 RegExp()

定义正则两种方式
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}");
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/;
这会产生正则对象 正则对象可以调用test方法 该方法传入待匹配的字符串

1.全局模式的规律

正则字符串不加/g的情况下只匹配一次 在正则字符串后面加\g会开启全局模式 这其中有个指针的概念 当匹配到了某个字符串 指针会停留在该字符串上 再次调用test就会匹配不到而报错 报错之后指针会重置,因此产生如下的情况:

lastIndex

2.test匹配数据不传默认传undefined



例子2:

练习

1.编写代码,将当前日期按“2017-12-27 11:11 星期三”格式输出

let day = new Date()
let list = ['一','二','三','四','五','六','日']
times = `${day.getFullYear()}-${day.getMonth()+1}-${day.getDate()} ${day.getMinutes()}:${day.getSeconds()} 星期${list[day.getUTCDay()-1]}`

快速入门JavaScript编程语言的更多相关文章

  1. jxa快速入门,Javascript已加入AppleScript全家桶

    因为工作环境基本是以跨平台为主,所以纯mac本地化的AppleScript一直关注是不够的,前几天找资料发现AppleScript也在迅速的进步着,目前已经对Javascript做了比较好的支持--- ...

  2. 造轮子和用轮子:快速入门JavaScript模块化

    造轮子和用轮子:快速入门JavaScript模块化 前言 都说“不重复造轮子”,就像iPhone——它除了打电话还可以播放音乐——但是工程师不用从零开始做一个音乐播放功能,也许只要在iPhone的系统 ...

  3. 前端零基础快速入门JavaScript

    JavaScript代码可以直接嵌在网页的任何地方,不过通常我们都把JavaScript代码放到<head>中: <html><head> <script&g ...

  4. 转:几十种编程语言的快速入门教程- learnxinyminutes.com

    原文来自于:http://top.jobbole.com/15551/ 这家网站的名称是 Learn X in Y minutes,包括了几十种编程语言的快速学习入门教程.打开几种编程语言来看了一下, ...

  5. JavaScript快速入门(四)——JavaScript函数

    函数声明 之前说的三种函数声明中(参见JavaScript快速入门(二)——JavaScript变量),使用Function构造函数的声明方法比较少见,我们暂时不提.function func() { ...

  6. html5快速入门(四)—— JavaScript

    前言: 1.HTML5的发展非常迅速,可以说已经是前端开发人员的标配,在电商类型的APP中更是运用广泛,这个系列的文章是本人自己整理,尽量将开发中不常用到的剔除,将经常使用的拿出来,使需要的朋友能够真 ...

  7. IdentityServer4 中文文档 -15- (快速入门)添加 JavaScript 客户端

    IdentityServer4 中文文档 -15- (快速入门)添加 JavaScript 客户端 原文:http://docs.identityserver.io/en/release/quicks ...

  8. 【JavaScript】快速入门

    摘抄地址快速入门 No1: JavaScript严格区分大小写 No2: JavaScript不区分整数和浮点数,统一用Number表示 NaN表示Not a Number,当无法计算结果时用NaN表 ...

  9. JavaScript学习02(js快速入门)

    快速入门 基本语法 JavaScript的语法和Java的语法类似,每个语句以;结束,语句块用{...}.但是JavaScrip并不强制要求在每个语句的结尾加;,浏览器中负责执行JavaScript代 ...

  10. Swift语言快速入门

    Swift语言快速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著   ISBN 978-7-121-24328-8 201 ...

随机推荐

  1. 使用kuboard界面配置springcloud的其中一个模块设置环境变量,使用nacos配置地址等有关设置

    总结: 工作负载类型是StatefulSet的pod,不论其上层的service是nodeport还是Headless, 对外提供的地址格式是: <pod name>.<servic ...

  2. .NET MAUI 社区工具包 1.3版本发布

    2022 年 10 月 4 日,微软发布了 .NET MAUI 社区工具包的 1.3 版,具体参见微软官方博客:https://devblogs.microsoft.com/dotnet/announ ...

  3. LinkedBlockingQueue详解

    LinkedBlockingQueue介绍 [1]LinkedBlockingQueue是一个基于链表实现的阻塞队列,默认情况下,该阻塞队列的大小为Integer.MAX_VALUE,由于这个数值特别 ...

  4. Linux Block模块之deadline调度算法代码解析

    1 总体说明 Deadline调度器对一个请求的多方面特性进行权衡来进行调度,以期望既能满足块设备扇区的顺序访问又能兼顾到一个请求不会在队列中等待太久导致饿死.Deadline调度器为了兼顾这两个方面 ...

  5. java集合框架复习----(4)Map、List、set

    文章目录 五.Map集合[重要] 1.hashMap 六.Collections工具类 总结 集合的概念 List集合 set集合: Map集合 Collection 五.Map集合[重要] 特点: ...

  6. vue+elementUi实现将数字转化为 对应的字符串内容

    文章目录 1.实现的效果 2.template 3.方法中的数据 4.实际运用 1.实现的效果 数据库状态字段 vue前端效果 2.template prop是你的数据库的字段名称 <el-ta ...

  7. JavaScript基础&实战(5)js中的数组、forEach遍历、Date对象、Math、String对象

    文章目录 1.工厂方法创建对象 1.1 代码块 1.2.测试结果 2.原型对象 2.1 代码 2.2 测试结果 3.toString 3.1 代码 3.2 测试结果 4.数组 4.1 代码 5.字面量 ...

  8. 记一次 .NET 某娱乐聊天流平台 CPU 爆高分析

    一:背景 1.讲故事 前段时间有位朋友加微信,说他的程序直接 CPU=100%,每次只能手工介入重启,让我帮忙看下到底怎么回事,哈哈,这种CPU打满的事故,程序员压力会非常大, 我让朋友在 CPU 高 ...

  9. 学习Java AES加解密字符串和文件方法,然后写个简单工具类

    Reference Core Java Volume Ⅱ 10th Edition 1 对称加密 "Java密码扩展"包含了一个Cipher,它是所有密码算法的超类.通过getIn ...

  10. shell实践

    shell实践 父子shell 父shell:我们在登录某个虚拟机控制器终端的时候(连接某一个linux虚拟机)时,默认启动的交互式shell,然后等待命令输入. ps命令参数,是否有横杠的参数作用是 ...