JavaScript(JS)是一种具有函数优先的轻量级、解释性、即时编译型的编程语言。
JavaScript是一种基于原型编程、多范式动态脚本语言,支持面向对象、命令式和声明式风格。
主要用来开发Web页面的脚本语言,也会用在非浏览器环境中( Node.js、 Apache CouchDB 、 Adobe Acrobat 等)。
在浏览器中使用JavaScript
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script type="text/javascript" src="hello.js"></script> </head> <body> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script type="text/javascript"> alert('hello javascript') </script> </head> <body> </body> </html>
在<head>和<body>中使用JavaScript的区别
在head部分中的JavaScript会在被调用的时候才执行;在body部分中的JavaScript会在页面加载的时候被执行。
因为浏览器解析html是从上到下的。如果把JavaScript放在head里的话,则先被解析,但这时候body还没有解析。
JavaScript标识符:变量,函数,属性名或函数名和函数参数
变量是一个值的容器,该容器的值可以随时改变。ECMAScript的变量是弱类型,可以用来保存任何类型的数据。
JavaScript弱类型语言变量特点
变量的数据类型在初始化的时候确定
变量的数据类型可以随时发生改变
类型细分不明显
定义变量时使用var关键字
var a; // 变量声明 a = 10; // 变量初始化 console.log(a); // 变量调用
var a = 1; var a = 'hello';
console.log(a);//不会报错 var a = 3; // 等价于 var a; console.log(a); a = 3;
function foo(){ if(true){ var a = 1; console.log(a); // 1 } console.log(a); // 1 //没有局部作用域 } foo(); console.log(a); // 报错 // 有函数作用域
基本数据类型:
字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(ES6新增)
引用数据类型:
对象(Object)、数组(Array)、函数(Function)
基本数据类型和引用数据类型在内存中如何存储
实现深拷贝的方法
通过json对象实现深拷贝(JSON.stringify,JSON.parse)
Object.assign()拷贝
lodash函数库实现深拷贝
递归的方式实现深拷贝
等
typeof 变量名;返回值:"undefined" 未定义、 "boolean" 布尔类型、 "string" 字符串、 "number" 数值、 "object" 对象、 "function" 函数、"symbol"
typeof 1; // number typeof '1'; // string typeof true; // boolean typeof {}; // object typeof []; // object var a; typeof a; // undefined a = function (){} typeof a; // function typeof Symbol('1'); // symbol
判断是不是不是一个数字
isNaN(10); // false isNaN(10/0); // false isNaN(10/'a'); // true
判断是否是一个有效值
isFinite(10); // true isFinite(10/0); // false