JS初学者的自我养成(一)

445 阅读4分钟

前言: 就当是我从小白,一点点,走过来的印记吧,希望我能一直坚持下去,加油!

基本数据类型

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);
    1. 转为整型;
    2. 转换为十进制 parseInt(demo,16) 代表将demo认为是16进制的,变换过来,答案为16;
    3. parseInt("100px"),答案为100,切断,和上面不一样重要!
  • parseFloat(demo); 与上面非常类似
  • String(demo); 自己理解下,类型转换
  • Boolean(demo)
    1. "" 空字符串------------false
    2. " "空格字符串,有内容字符串------------ true
    3. null------------false
    4. undefined------------false
    5. new Object()------------true 对象
    6. 非零数字------------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. 陷阱和试题

  1. 下面的返回类型为?
console.log(typeof(a));
console.log(typeof(typeof(a)));

1.a未定义,一般情况都会出错。当且仅当放在typeof()中不会报错。 第一局返回 undefined 2.第二局返回什么? typeof(undefined)返回肯定是undefined。实际不然,因为第一个返回字符串,第二局返回string 记住:==typeof()返回的6种类型,全是string==

  1. 作业与练习:

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