单信js——基础部分
- 数据类型
字符串
数字
布尔值
undefined
null
数组
函数
对象
变量根据值类型分类,包含两种:基本类型值和引用类型值。
基本类型值就是简单的数据。而引用类型值指的更多是由多个值构造的复杂对象。
常见的基本类型有:Undefined(默认)、Null(回收资源)、Boolean、Number和String。
基本类型保存在栈内存中,在内存中占有固定大小的空间,是直接对值的操作。
基本类型的值复制拷贝后修改任意一个,对另一个不会造成影响。
引用类型的值则是保存在内存中的对象,保存在堆内存中。
变量中保存的实际上只是一个指针,这个指针指向内存中的另一个位置,由于引用类型大小不固定(比如数组是可以动态增加的),不能保存在栈内存当中,但是它们的内存地址是固定的存储在栈内存当中。当查询引用类型的变量时,就首先从栈中读取内存地址,然后“顺藤摸瓜”地找到保存在堆中的值。这种方式一般称为按“引用”访问,因为我们操作的不是实际值,而是被那个值所引用的对象。
当一个变量向另一个变量复制引用类型值时,把值分配到新空间,但是值的副本只是一个指向存储在堆中的一个对象,最终修改的是同一个对象。
typeof用来确定一个变量是字符串、数字、布尔,还是undefined。
语法为: var result = typeof abc;
instanceof用来确定一个引用类型是一个什么类型的对象。
语法为: var result = aaa instanceof Array/String/Function;
var a='hello';
console.log(typeof a); //string
var arr=[];
var fn=function(){};
console.log(arr instanceof Array); //true
console.log(fn instanceof Function); //true
- 数组
arr=新的数组;
arr[下标]=新的值;
arr.push();
arr.unshift();
arr.pop();
arr.shift();
数组元素的删除
arr.splice(索引,删除的元素个数);
arr=null;
遍历数组【掌握】
for(var i=0; i<=arr.length; i++){ }
arr.forEach((value,index)=>{ });
- 对象
//定义对象
var obj=new Object();
var obj={};
//添加属性和方法
obj.属性名或方法名=值;
obj.name='张三疯';
obj.showName=function(){
console.log(this.name);
}
//使用属性和方法【掌握】
obj.name; //第一种,用.符号调用属性(最常用)
obj['name']; //第二种,动态属性
- 函数
//定义函数
function 函数名(形式参数1,形式参数2,形式参数n){
//函数体
return 值;
return [值,值]; //将返回值转换成数组即可返回多个值
}
//定义匿名函数
var fn=function(){
};
//实例化一个函数对象
var fn=new Function();
//调用函数: 将函数的返回值放在函数的调用处
fn();
如果函数没有返回值,默认返回undefined
function foo() {
return
{ name: 'foo' };
}
foo(); // undefined
注意return语句的一个大坑,如果把return语句拆成两行,相当于return undefined,下面一句已经不执行了。
允许实参个数和形参个数不一致。
函数中的内置对象arguments,它只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数。
利用arguments,你可以获得调用者传入的所有参数。实际上arguments最常用于判断传入参数的个数。
-
结构语句if else
其中else语句是可选的。如果语句块只包含一条语句,那么可以省略{}
省略{}的危险之处在于,如果后来想添加一些语句,却忘了写{},就改变了if...else...的语义,else后的第二句已经不在else的控制范围了 -
DOM文档对象模型
//查(查询、获取)
document.getElementById(ID);
document.getElementsByName(NAME);
document.getElementsByTagName(标签名);
document.getElementsByClassName(类名);
document.getAttribute('属性名'); //获取指定的属性值
document.querySelector('h1'); //HTML5提供的新的DOM API
//新增
var h1=document.createElement('h1'); //在内存中创建一个DOM元素
div.appendChild(h1); //将内存中创建好的DOM元素添加到DIV上
//修改
div.className='新的值'; //修改属性值
div.innerHTML=HTML的值; //修改内容
div.innerText='';
//删除
div.removeChild();
//事件绑定【掌握】,事件三要素:事件源、事件类型、事件处理函数
<input type="button" onclick="fn()"/>
btn.onclick=function(){
}
btn.addEventListener('click',function(){
});
-
BOM浏览器对象模型
BOM就是 window对象:
window.alert();
window.setTimeout(); //超时执行,只执行一次
window.setInterval(); //按周期执行函数,无限次执行
window.clearInterval(); //清除周期执行函数
window.document //DOM对象
window.history //历史对象
window.location //地址栏对象
window.onload=function(){}; -
JSON是一个轻量级的数据交换格式,天然就是JS的对象。
JSON: {"name":"张三疯","age":18}
数据包含在大括号内
每一组数据分为键值对,用 : 隔开
键名必须是一个字符串,用 " " 引起来
值可以是任意类型,如:数字、字符串、布尔值、数组、对象
多组数据之间使用 , 隔开
规范数据格式,让数据在接收到以后使用便捷
1. 为什么要解析JSON?
因为JSON是一种数据交换格式,在正常使用时由后端将数据传到前端,前端接收到的数据会是一个字符串。
JSON的属性名称(和字符串类型的值)要求以“双引号”包裹
JS对象字面量: {name:”小强”}
JSON: {“name”:”小强”}
2. JSON的转换(解析)
1) 将JSON格式字符串转换成对象【掌握】
因为JSON 只是一种文本字符串
var 对象变量=JSON.parse(字符串)
用途:通常用于将接收到的数据(字符串形式)转换成对象进行使用
2) 将对象(任意对象或数组)转换成字符串【掌握】
var 字符串=JSON.stringify(对象或数组);
用途:通常用于将数据转换成字符串以后发送到服务器存储到数据库
var obj={"name":"张三疯","age":18};
//将对象转换成字符串
var str=JSON.stringify(obj);
console.log(typeof str,str); //string {"name":"张三疯","age":18}
//将字符串转换成对象
var data=JSON.parse(str);
console.log(typeof data,data);