前言: 就当是我从小白,一点点,走过来的印记吧,希望我能一直坚持下去,加油!
基本数据类型
1. 值类型
与C#类似,这里的值类型是存储在stack(栈first-in-last-out)中的,如果赋值,是拷贝了一个备份文件,不影响原值
值类型包括:
- string
- 数值型(int float double等,但是js中没有这些具体定义,直接var)
- 布尔类型(true false)
注意在c#中,string数以引用类型
2. 引用类型
引用类型数据存储在heap(堆中),赋值时是直接指向地址的,下面用例子演示
典型的引用类型包括:
- array数组
- function 函数
- objection 对象
var arr=[1,2];
var arr1=arr;
arr.push(3);
document.write(arr1);
运行后你会惊奇的发现,arr1虽然没有直接改变,但是因为给变了arr,所以arr1和arr内的值都变了。==因为arr和arr1都存储了数据的地址,而这个具体的值,保存在heap中==
3. 运算符
var a=10;
var b;
b = ++ a - 1 + a ++;
document.write(a+""+b)
看懂这个答案为 a=12; b=21即可。
4. 数值类型的一些特殊情况
var a=0/0; NaN
var b=1/0; infinity
var c=-1/0; -infinity
var
还有两种特别的数值类型 null undefined
所谓undefined 当 var a;并没有赋值时,就是未定义。
null是完全占位置用的。
undefined null的特殊
undefined > 0; //false
undefined < 0; //false
undefined == 0; //false
null > 0; //false
null < 0; //false
null == 0; //false
null == undefined //true
2. 初识引用类型
数组前面说过了,这里简单介绍下object
object Deng{
name: "Deng",
age:40,
handsome:false,
hobby:"basketball";
}
也就是c#中的。 里面可以定义方法和属性,这在之后详细介绍
3. typeof
基本概念
var a=123,
b="123",
c,
d=true,
d={}.
console.log(typeof(a)+""+type(b)+""+typeof(c)+""+typeof(d)+""+typeof(e)); //number string undefined boolean object
除了以上值,typeof还可以返回 function 综上,可以返回的值有:
- number
- boolean
- string
- function
- object (null [数组] {} 均返回object)
- undefined
类型转换JS独有
1. 显示类型转换
- Number(mix); 注意null ---0 undefined---NaN "a"---NaN
var a=Number(null),
b=Number(undefined);
console.log(a+typeof(a)); //0 number
console.log(b+typeof(b)); //NaN number
- parseInt(demo);
- 转为整型;
- 转换为十进制 parseInt(demo,16) 代表将demo认为是16进制的,变换过来,答案为16;
- parseInt("100px"),答案为100,切断,和上面不一样重要!
- parseFloat(demo); 与上面非常类似
- String(demo); 自己理解下,类型转换
- Boolean(demo)
- "" 空字符串------------false
- " "空格字符串,有内容字符串------------ true
- null------------false
- undefined------------false
- new Object()------------true 对象
- 非零数字------------true
- toString(基底) 注意 ==undefined 和null 不能使用!!!!!==
var a = 123,
demo,
bajinzhi;
demo=a.toString();
bajinzhi=a.toString(8);//转换为8进制,神器!!
因此,有一下关系: parseInt toString
x-----10 10--------x
- toFixed(x) 保留x位有效小数
2. 隐式转换
1. isNaN()
判断是不是NaN,返回回来。
理论上讲,应该除了 isNaN(NaN)都会返回false,但是isNaN("abc")却会返回true
原理: 1. Number("abc") ; 2. 与NaN比较 3. 返回
掌握以上原理,尝试一下试题
isNaN(null); Number(null)---0---- is NaN? ----false
isNaN(undefined) ; Number(undefined)---NaN---- is NaN? ----true
isNaN("c");
2. ++ -- + - 一元操作符
这些方法,在使用前,都会调用Number() ==注意这里+ -不是加减,是正负==
var a="123";
a ++;
console.log(a); // 124
+ a;
- a; //一样会调用Number()
3. + 加号
当加号两边有一个为字符串,就会调用String()转换为字符串
4. - * / %
与加号类似,不同的是,全部调用Number()
5. && || !
这些会调用Boolean()
6. == !=
这些会隐式转换比较
"123"==123 返回为true
但是,NaN很特殊 NaN==NaN 返回为false;
7. > < >= <=
当数值与字符串放在一起比较,会优先转换为字符串
"123">4; //返回ture;
8. 不要转换!
显然,字符串和数值是不应该一样,遇到这种严格的比较,不能用
==
严格相等,不要转换,用:
-===
!==
4. 陷阱和试题
- 下面的返回类型为?
console.log(typeof(a));
console.log(typeof(typeof(a)));
1.a未定义,一般情况都会出错。当且仅当放在typeof()中不会报错。 第一局返回 undefined
2.第二局返回什么? typeof(undefined)返回肯定是undefined。实际不然,因为第一个返回字符串,第二局返回string
记住:==typeof()返回的6种类型,全是string==
- 作业与练习:

- 思考和复习:
- 用HTML+CSS画三角形;
- 子级在父级垂直、水平居中;
- var foo = 10 + "20" //答案1020