原生JS填坑

原生JS填坑,第1张

目录

循环遍历创建DOM只能插入一个

本地存储和会话存储

输出语句 document.write

变量命名规则

两种数据类型检测的区别

各种数据类型的转换

1.数字类型的转换

2.字符串的转换

3.布尔类型的转换

赋值运算符

逻辑运算符

自增自减运算符


循环遍历创建DOM只能插入一个

问题:在动态创建列表时,通过页面加载函数获取到后台数据后,循环遍历创建dom节点时,只能插入最后一个的数值的节点

然而获取的数据结构为:

对应下可以看出执行遍历后,只是传递了最后一个值,之前的值都被覆盖了,问题代码如下:

	window.onload =  function getdata(){
		$.ajax({
		 url:'index',
		 async:false,
		 dataType:'json',
		 success:function(e){
		 var data = e;
		 console.log("已经获取数据");
		 var father = document.getElementById('.showbox');
		 var div = document.createElement('div');//问题就出在这里
		 for (let key in data) {
		   for(let i=0,res=data[key];i<=res.length-1;i++){ 
			 console.log(res[i]);
			 var html='';
			html+='';
		    html+='';	
			div.innerHTML = html;
			// console.log(html);
			showbox.appendChild(div);
				 }
			 }
		 }
	 })
},

因为动态创建的dom节点都会被appendChild()方法添加到,一个div父盒子中,但是父盒子却并没有放在遍历循环中,所以始终只有一个父盒子,所传递参数就会覆盖之前的参数,就造成了只会插入最后一个的情况。

解决办法
将父元素也放入循环遍历中,代码如下:

	window.onload =  function getdata(){
		$.ajax({
		 url:'index',
		 async:false,
		 dataType:'json',
		 success:function(e){
		 var data = e;
		 console.log("已经获取数据");
		 var father = document.getElementById('.showbox');
		 var div = document.createElement('div');//问题就出在这里
		 for (let key in data) {
		   for(let i=0,res=data[key];i<=res.length-1;i++){ 
			 console.log(res[i]);
			 var html='';
			html+='';
		    html+='';	
			div.innerHTML = html;
			// console.log(html);
			showbox.appendChild(div);
				 }
			 }
		 }
	 })
},

效果如下:

本地存储和会话存储

localStorage:
是一种你不主动清除它,它会一直将存储数据存储在客户端的存储方式,即使你关闭了客户端(浏览器),属于本地持久层储存

sessionStorage:
用于本地存储一个会话(session)中的数据,一旦会话关闭,那么数据会消失,比如刷新。

localStorage与sessionStorage具有相同的API,以下方法都可以用于sessionStorage

localStorage存储方法

localStorage.name ='vanida;
localStorage["name"]='vanida';
localStorage.setItem("name","vanida");

localStorage获取值方法

var name = localStorage["name"]
var name= localStorage.name
var name= localStorage.getItem("name");

localStorage清除特定值方法

//清除name的值

localStorage.removeItem("name");
localStorage.name='';

localStorage清除所有值方法

 localStorage.clear()

localStorage只能存储字符串,如果需要存储对象,首先要转化为字符串。利用JSON.stringify();

var person = {name:"vanida","sex":"girl","age":25};
localStorage.setItem("person",JSON.stringify(person));
// localStorage.person="{"name":"vanida","sex":"girl","age":25}"

注意:JSON.stringify()中不要忘了“i”,stringify而不是stringfy!

然后取出person的对象你可以用JSON.parse();

person = JSON.parse(localStorage.getItem("person"));
// {name: "vanida", sex: "girl", age: 25}
输出语句 document.write

这个可以直接把内容输出在页面上(可以解析标签),除数字类型外需要用单引号包裹

document.write(111)
document.write('abc')
document.write('')
document.write(111)
document.write('')
var i=0
document.write(i)

输出结果:

变量命名规则

两种数据类型检测的区别

各种数据类型的转换 1.数字类型的转换

1、数字类型的转换

      语法:Number(你要转换的数据)

      返回值:转换好的数据

      特点:将转换数据当作一个整体;能转成数字就转数字类型,不能转为数字类型就会返回NaN

2、整型转换

      语法:parseInt()

      返回值:转换好的数据

      特点:将转换数据拆分成一个个的字符,挨个转换直到一个不能转为合法字符串的位置为止,且不认识小数点

3、浮点转换

     语法:parseFloat()

     返回值:转换好的数据

     特点:整型转换特点一样,只不过多认识了一个小数点

4、正负值的添加

     语法:+变量 、-变量

     返回值:转换好的数据

     特点:和Number的解析规则一样

5、非加法的数学运算

     语法:parseFloat()

     返回值:转换好的数据

     特点:整型转换特点一样,只不过多认识了一个小数点

Numer('100') //100
Numer('abc') //NaN
Numer('100.123') //100.123

parseInt('100') //100
parseInt('100abc') //100
parseInt('100.123') //100

parseFloat('100.123')//100.123

var b1 =true
parseInt(b1) //NaN

var b2 ='100'
var b3 = +b2
var b4 = -b2
console.log(b3,b4) // 100 100

var b2 ='100'
var b3 = b2 - 0
var b4 = b2 * 1
var b5 = b2 / 1
console.log(b3,b4,b5) // 100 100 100
2.字符串的转换

1、string()

      语法:string(你要转换的数据)

      返回值:转换好的数据

      特点:任何数据类型都能转

2、tostring()

      语法:要转换的数据.tostring()

      返回值:转换好的数据

      特点:undefined  null不能转换

3、+运算符

      js里的加法运算符有两种情况

         1.进行字符串的拼接

             +符号任意一边是字符串的时候就是字符串拼接

         2.进行数学运算

             +符号两边都是布尔值或者数字类型时,才是数学运算

3.布尔类型的转换

1.Boolean ()

        语法:Boolean (你要转换的数据)

        返回值:转化好的数据

        特点:JS里只有 0、空字符串、NaN、undefined、null转换为false,其余的所有的内容都转换为true 

1.Boolean ()

        语法:Boolean (你要转换的数据)

        返回值:转化好的数据

        特点:JS里只有 0、空字符串、NaN、undefined、null转换为false,其余的所有的内容都转换为true 

赋值运算符

1、+=、*=、/=、-=

都是在自己的基础上进行叠加

比如:a += b  等价于  a=a+b

var a ='10'
a+='20'
console.log(a) //1020
逻辑运算符

1、&& 与(且)

   运算符两边都是true为true,任意一边为false就是false

 具体用法:

if(i<20 && i>15){  
   //这里标识i的范围,因为js里设置范围不能用 15

2、||  或

任意一边是true就为true,两边都是false的时候才是false

3、! 非

进行取反 *** 作,可以利用取反的特性进行双取反获得boolean值

//一般的获取布尔值方法
console.log(Boolean(0))
//双取反用法
console.log(!!0) //false
自增自减运算符

1、++ 运算符、- - 运算符

分为  ++前置 和  后置++,都会对变量自身进行改变

区别:++前置会先改变自身变量后参与运算,后置++则会先参与运算再改变自身的值

var a = 10 
var res = 10 + a++ //后置++
console.log(res,a)  //20 11


var b = 10
var ress = 10 + ++b  //前置++
console.log(ress,b)   //21 11

var n = 5
var resss = n++ + ++n + ++n + n++ 
console.log(resss,n)  //28  9
循环控制语句

1、continue

当循环语句执行到这句语句时,结束本次循环,接着开始下一次循环

for(i = 0;i<=3;i++){
  if(i=2){
    continue
    console.log("跳过本次循环")
  }
    console.log(i)  
}
  //  1
  //  跳过本次循环  
  //  3     

2、break

跳出循环,仅是跳出当前循环

3、标记语法

与break连用,给某循环自定义标记,可在需要的时候跳出循环

abcd:  //自定义标记
for(var i=0;i<=5;i++){
  for(var j=0;j<=3;j++){
    if(i==3&&j==2){
      console.log("看到半条虫子")
      break abcd  //可以给任意循环做标记,标记名称也是自定义的
    } 
  }
   console.log('吃的第' + i + '个包子的第' + j + '口')
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1320266.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-11
下一篇 2022-06-11

发表评论

登录后才能评论

评论列表(0条)