这段时间一来,浑浑噩噩的不知道该学什么,js这块自己一直学的不是特别好,打算重新捡起来,共勉。
JavaScript的数据类型:
JavaScript的数据类型包括两种:一种是基本数据类型,分为string,number,boolean,null,undefined,一种是引用类型,由多个值构成的引用对象
1、基本数据类型
1.1、String
1.2、Number
1.3、Boolean
1.4、null
1.5、undefined
<script type="text/javascript">
var strVal = "天道酬勤";
var numVal = 12;
var boolVal = true;
var str;
var nullVal = null;
console.log("StrVal的类型是:"+typeof strVal);
console.log("numVal的类型是:"+typeof numVal);
console.log("boolVal的类型是:"+typeof boolVal);
console.log("str的类型是:"+typeof str);
console.log("str1的类型是(注:这里的str1并没有声明哦):"+typeof str1);
console.log("nullVal的类型是:"+typeof nullVal);
console.log(null == undefined);
console.log(typeof null);
console.log(typeof undefined);
</script>
效果图如下:
StrVal的类型是:string
numVal的类型是:number
boolVal的类型是:boolean
str的类型是:undefined
str1的类型是(注:这里的str1并没有声明哦):undefined
nullVal的类型是:object
true
object
undefined
这里null == undefined是true,其实值undefined是null派生来的,因此ecmaScript把他们定义为相等的。
【注意:这里有一个小知识点:如果我们从后端那边返回过来的数据不知道是属于什么类型的情况下,我们可以用typeof val,来查看返回的类型是什么,之后再判断就可以了】
堆栈这块,基本数据类型的话,使用的是值传递的方式,副本的改变不会影响到原来的数据;引用数据类型,使用的是引用传递,比如A赋值给B,对B的改变会影响到A。
2、引用数据类型
2.1、Object
2.2、Array
2.3、map
....
Object我没怎么用过,用的比较多的是Array和map。
【数组】
在js中声明数组有两种方式:
1、直接定义一个方括号
var str = []; // 定义一个空方括号
2、new一个Array();
var str = new Array();
在js元素标签中如何获取同一个id的值;
如:<input type="test" id="userId" name = "userId" value= "user.userId">
当存在多个userId的时候,可以使用js中的each获取值
<script>
function fc(){
$("input[name='userId']").each(function(){
str.push($(this).val()); // 赋值给数组,之后指定传递数据给后台就可以
})
}
</script>
【后台】
public String moduelName(@RequestParam("str")String[] str); // 即可获取数组数据
【Map】
在js中声明map定义一个大括号
var str = {};
js页面需要写入有:
var map = {};
map[key] = value;
这里需要将map转化为JSON.stringify(map);之后传递给后台
【后台】
public String modelName(@RequestParam("map")String map){
// 需要使用JSONObject 转换为map类型
JsonObject json = JSONObject.fromObject(map)
Map m = (Map)json; // 强转即可
}
如果是引用数据类型的话;看代码
/*声明一个map集合*/
var mA = {};
mA.key = 1;
mA.value = 2;
console.log(mA.key,mA.value);
var mB = mA;
mB.key = 3;
console.log(mA.key);
浏览器输出
1 2
3
例子声明一个map,将mA赋值给mB,对mB.key赋值的情况,mA.key的值被改变了 ,说明了两个引用数据类型变量指向同一个对象,mA赋值给mB,实际上是把这个对象在栈内存的引用地址复制了一份给mB,但是本质上都是指向了同一个对象,都是对同一个对象做操作
【记录下小知识点:
判断值是否为空的时候,之前遇到一个"undefined",带双引号的undefined,后面一直直接判断undefined,一直不对,后面输出这个值的时候才发现判断有问题,这里仅作为自己粗心记录下
if(!( a == null || a == "" || a == undefined || a == "undefined")){
//做操作
}
】