JavaScript
一个完整的 JavaScript 实现是由以下 3 个不同部分组成的:
- 核心(ECMAScript) ------------>基础语法---------->必须要会的
- 文档对象模型(DOM) Document object model (整合js,css,html) ---------->重要
- 浏览器对象模型(BOM) Broswer object model(整合js和浏览器)------------>不重要
简单地说,ECMAScript 描述了JavaScript语言本身的相关内容
JavaScript 是脚本语言
JavaScript 是一种轻量级的编程语言。
JavaScript 是可插入 HTML 页面的编程代码。
JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。
JavaScript引入方式
1. 书写位置
Script标签内写代码
<script> // 在这里写你的JS代码 </script>
引入外部的JS文件
<script src="myscript.js"></script>
浏览器控制台
2. 注释
单行注释:// 这是单行注释 快捷键:Ctrl + ?
多行注释: 快捷键:ctrl + shift + ?
/*
这是
多行注释
*/
3. 结束符
JavaScript中的语句要以(;)分号作为结束符。
4. 变量声明
1. JavaScript的变量名可以使用_,数字,字母,$组成,不能以数字开头。
2. 声明变量使用 var 变量名; 的格式来进
在es5中:
var name = 'kevin';
es6中:
let name='kevin'
5. 变量的命名
基本上遵循python的变量命名规则即可
下划线、驼峰体、大驼峰、小驼峰, 保留字不能用来做命名。
6. 常量
python没有真正意义上的常量,全大写就是常量
js中有真正意义上的常量
在Js中定义常量:const pi = 3.14
JavaScript数据类型:(js也是一门面向对象语言,一切皆对象)
JavaScript拥有动态类型
var x; // 此时x是undefined var x = 1; // 此时x是数字 var x = "Alex" // 此时x是字符串
如何查看数据类型:用 typeof
var a = 1; var b = 1.11; console.log(typeof a); console.log(typeof b);
1. 数值类型(number)
JavaScript不区分整型和浮点型,只有一种数字类型var a = 12.34; var b = 20; var c = 123e5; // 12300000 = 123*10**5 var d = 123e-5; // 0.00123
还有一种NaN,表示不是一个数字(Not a Number)。
<script> var a = 'a3432432dsadasd123dasdasds'; console.log(parseInt(a)) </script>
结果如图所示:
2. 字符串(string)
拼接字符串一般使用“+”
var s = 'hello'; var ss = "hello"; console.log(s + ss);
结果:
常用方法:
方法 |
说明 |
.length |
返回长度 |
.trim() |
移除空白 |
.trimLeft() |
移除左边的空白 |
.trimRight() |
移除右边的空白 |
.charAt(n) |
返回第n个字符 |
.concat(value, ...) |
拼接 |
.indexOf(substring, start) |
子序列位置 |
.substring(from, to) |
根据索引获取子序列 |
.slice(start, end) |
切片 |
.toLowerCase() |
小写 |
.toUpperCase() |
大写 |
.split(delimiter, limit) |
分割 |
.length:返回字符串的长度
var s = 'hello,world'; //length:求出字符串的长度 console.log(s.length); // 结果为11
结果如图:
.trim():去除字符串两边的空格
.trimLeft():去除左边的空格
.trimRight():去除字符串右边的空格
代码演示:
var s = ' hello,world '; console.log(s.trim()) //将字符串两边的空格去除 console.log(s.trimLeft()) //去除字符串左边的空格 console.log(s.trimRight()) //去除字符串右边的空格
结果:
.charAt(n):返回第n个字符
var s = 'hello,world'; console.log(s.charAt(5)) //返回第五个字符
结果:
.concat(value, ...):拼接
var s = 'hello,world'; console.log(s.concat('hello', 'world'))
结果:
.indexOf(substring, start):子序列位置
var s = 'hello,world'; console.log(s.indexOf('hello')) // 当字符在字符传串中,返回第一个字符的序列号即索引,h的索引:0 console.log(s.indexOf('world')) // 当字符在字符传串中,返回第一个字符的序列号即索引,w的索引:6 console.log(s.indexOf('world1')) // 当字符不在字符传串中,返回值:-1
结果:
.substring(from, to):根据索引获取子序列
var s = 'hello,world'; console.log(s.substring(1, 5))
结果:
.slice(start, end):切片
var s = 'hello,world'; console.log(s.slice(1, 5))
结果:
slice和substring的区别
string.slice(start, stop)和string.substring(start, stop): 两者的相同点: 如果start等于end,返回空字符串 如果stop参数省略,则取到字符串末 如果某个参数超过string的长度,这个参数会被替换为string的长度 substirng()的特点: 如果 start > stop ,start和stop将被交换 如果参数是负数或者不是数字,将会被0替换 silce()的特点: 如果 start > stop 不会交换两者 如果start小于0,则切割从字符串末尾往前数的第abs(start)个的字符开始(包括该位置的字符) 如果stop小于0,则切割在从字符串末尾往前数的第abs(stop)个字符结束(不包含该位置字符)
.toLowerCase():小写
.toUpperCase():大写
var s = 'hello,world'; console.log(s.toUpperCase()) //大写 console.log(s.toLowerCase()) //小写
结果:
split(delimiter, limit):分割,以数组的形式返回
var s = 'hello,world'; console.log(s.split(','))
结果:
ES6中引入了模版字符串(重要)
var name = 'kevin'; var age = 18; var s = `my name is ${name}, my age is ${age}`; console.log(s);
布尔值(true、false)
js中有哪些是假:""(空字符串)、0、null、undefined、NaN都是false
null和undefined
● null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;
● undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。
对象(object)
对象只是带有属性和方法的特殊数据类型。JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...此外,JavaScript 允许自定义对象。
数组
数组对象的作用是:使用单独的变量名来存储一系列的值。类似于Python中的列表。
var a = [123, "ABC"]; console.log(a[1]); // 输出"ABC"
结果:
数组的常用方法:
方法 |
说明 |
.length |
数组的大小 |
.push(ele) |
尾部追加元素 |
.pop() |
获取尾部的元素 |
.unshift(ele) |
头部插入元素 |
.shift() |
头部移除元素 |
.slice(start, end) |
切片 |
.reverse() |
反转 |
.join(seq) |
将数组元素连接成字符串 |
.concat(val, ...) |
连接数组 |
.sort() |
排序 |
.forEach() |
将数组的每个元素传递给回调函数 |
.splice() |
删除元素,并向数组添加新元素。 |
.map() |
返回一个数组元素调用函数处理后的值的新数组 |
运算符
1. + - * / % ++ --
var x=10; var res1=x++; var res2=++x; res1; //结果为10 res2; // 结果为12 这里由于的x++和++x在出现赋值运算式,x++会先赋值再进行自增1运算,而++x会先进行自增运算再赋值!
比较运算符
> >= < <= != == === !==== //===(强等于,即比较数值,又比较类型) !==
逻辑运算符
&&(and) ||(or) !(not)
赋值运算符
= += -= *= /=
流程控制
if-else
var a = 10; if (a > 5) { console.log("yes"); console.log(("no")) } else { console.log("no"); }
结果:
switch
var day = new Date().getDay(); // 获取星期几 2 switch (day) { case 0: case 1: case 2: console.log("Monday"); break; case 3: console.log("Monday"); break; case 4: console.log("Monday"); console.log("Monday"); console.log("Monday"); console.log("Monday"); console.log("Monday"); console.log("Monday"); console.log("Monday"); break; case 5: console.log("Monday"); break; default: console.log("...") }
注意:
switch中的case子句通常都会加break语句,否则程序会继续执行后续case中的语句。
结果:
for
for (var i = 0; i < 10; i++) { console.log(i); }
结果:
while
var i = 0; while (i < 10) { console.log(i); i++; }
结果:
三元运算
var a = 1; var b = 2; var c = a > b ? a : b // a if a>b else b //这里的三元运算顺序是先写判断条件a>b再写条件成立返回的值为a,条件不成立返回的值为b;三元运算可以嵌套使用; var a=10,b=20; var x=a>b ?a:(b=="20")?a:b; // x=10
函数
函数定义
JavaScript中的函数和Python中的非常类似,只是定义方式有点区别。
普通函数定义
function f1() { console.log("Hello world!"); } f1() // 调用函数
带参数的函数
function f2(a, b) { console.log(arguments); // 内置的arguments对象 console.log(arguments.length); console.log(a, b); } f2(1,2) //调用函数并传参
带返回值的函数
function sum(a, b){ return a + b; } sum(1, 2); // 调用函数
匿名函数方式
var sum = function(a, b){ return a + b; } sum(1, 2);
立即执行函数
书写立即执行的函数,首先先写两个括号()()这样防止书写混乱(function(a, b){ return a + b; })(1, 2);
补充:
ES6中允许使用“箭头”(=>)定义函数。
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; //这里的return只能返回一个值,如果想返回多个值需要自己手动给他们包一个数组或对象中 }
函数中的arguments参数
function add(a,b){ console.log(a+b); console.log(arguments.length); console.log(arguments[0]);//arguments相当于将出传入的参数全部包含,这里取得就是第一个元素1 } add(1,2)
结果:
函数的全局变量和局部变量
局部变量:
在JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它(该变量的作用域是函数内部)。只要函数运行完毕,本地变量就会被删除。
全局变量:
在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。
变量生存周期:
JavaScript变量的生命期从它们被声明的时间开始。
局部变量会在函数运行以后被删除。
全局变量会在页面关闭后被删除。
作用域
首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。与python作用域关系查找一模一样!
例子1 :
var city = "BeiJing"; function f() { var city = "ShangHai"; function inner(){ var city = "ShenZhen"; console.log(city); } inner(); } f(); //输出结果是ShenZhen
结果:从里面一层层往外找,找到哪个就返回哪个的值
例子2:
var city = "BeiJing"; function Bar() { console.log(city); } function f() { var city = "ShangHai"; return Bar; } var ret = f(); // ret = Bar ret(); // 打印结果是 BeiJing
结果:
例子3:
var city = "BeiJing"; function f(){ var city = "ShangHai"; function inner(){ console.log(city); } return inner; } var ret = f(); ret();
结果:
自定义对象
JavaScript的对象(Object)本质上是键值对的集合(Hash结构),但是只能用字符串作为键。
var a = {"name": "Alex", "age": 18}; console.log(a.name); console.log(a["age"]);
遍历对象中的内容:
var a = {"name": "Alex", "age": 18}; for (var i in a){ console.log(i, a[i]); }
创建对象:
var person=new Object(); // 创建一个person对象 person.name="Alex"; // person对象的name属性 person.age=18; // person对象的age属性
Date对象
创建Date对象
//方法1:不指定参数 var d1 = new Date(); console.log(d1.toLocaleString()); //方法2:参数为日期字符串 var d2 = new Date("2004/3/20 11:12"); console.log(d2.toLocaleString()); var d3 = new Date("04/03/20 11:12"); console.log(d3.toLocaleString()); //方法3:参数为毫秒数 var d3 = new Date(5000); console.log(d3.toLocaleString()); console.log(d3.toUTCString()); //方法4:参数为年月日小时分钟秒毫秒 var d4 = new Date(2004,2,20,11,12,0,300); console.log(d4.toLocaleString()); //毫秒并不直接显示
Date对象的方法:
var d = new Date(); //getDate() 获取日 //getDay () 获取星期 //getMonth () 获取月(0-11) //getFullYear () 获取完整年份 //getYear () 获取年 //getHours () 获取小时 //getMinutes () 获取分钟 //getSeconds () 获取秒 //getMilliseconds () 获取毫秒 //getTime () 返回累计毫秒数(从1970/1/1午夜)
练习:
编写代码,将当前日期按“2017-12-27 11:11 星期三”格式输出。
const WEEKMAP = { 0:"星期天", 1:"星期一", 2:"星期二", 3:"星期三", 4:"星期四", 5:"星期五", 6:"星期六" }; //定义一个数字与星期的对应关系对象 function showTime() { var d1 = new Date(); var year = d1.getFullYear(); var month = d1.getMonth() + 1; //注意月份是从0~11 var day = d1.getDate(); var hour = d1.getHours(); var minute = d1.getMinutes() < 10?"0"+d1.getMinutes():d1.getMinutes(); //三元运算 var week = WEEKMAP[d1.getDay()]; //星期是从0~6 var strTime = ` ${year}-${month}-${day} ${hour}:${minute} ${week} `; console.log(strTime) }; showTime();
JSON对象
python中序列化和反序列化
import json json.dumps json.loads
在js中如何序列化和反序列化
JSON.stringify() # json.dumps JSON.parse() # json.loads
例子:
var str1 = '{"name": "Alex", "age": 18}'; var obj1 = {"name": "Alex", "age": 18}; // JSON字符串转换成对象 var obj = JSON.parse(str1); // 对象转换成JSON字符串 var str = JSON.stringify(obj1);
标签:function,console,log,前端,JavaScript,字符串,var From: https://www.cnblogs.com/Lucky-Hua/p/17569163.html