4

数据类型

 3 years ago
source link: https://foofish.net/JavaScript-note-p1.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

这本书一共有900多页,可以直接从第3章46页开始看,这章主要介绍JS的语法基础知识

1、js中的标识符推荐驼峰大小写形式, 例如:firstName, 第一个单词的首字母小写,后面单词首字母大写。 与python是不一样的,python用下划线表示, first_name。

2、 js的注释与c、java是一样的,单行注释 // 多行注释 //

3、定义变量需要关键字用 var, let 或者 const 来声明

var、let、const

这3个关键字都是用来声明变量的,现在详细介绍他们各自的用途和特点

var num = 10;

var 关键字声明的变量是局部变量, 如果是函数中定义的变量,函数执行完之后改变量就被销毁。和python 中不同的是, 在函数中用var定义局部变量,可以先引用变量,变量的定义放在后面,例如:

function hello (){
    console.log(age);
    var age = 10;
}

hello();

代码不会报错,也不是打印出10, 而是输出结果 undefined, 这是因为在函数中声明的变量会自动“提升”到该函数作用域的顶部,等价于

functioni hello(){

    var age;
    console.log(age);
    age=10;
}

let 关键字与var作用差不多,区别在于,let声明的范围更小,是块作用域。 所谓块作用域,if,for、while 这些语句块都是块作用域。

if(true){
    let yes="yes";
}
console.log(yes);

这里就会报错提示yes变量没有定义,因为已经超过了if语句块, 如果是var关键字定义,则没有这样的问题。

let 与 var 的另一个区别是,let 声明的变量不会自动提升到作用域的顶部,因此不能先引用再定义。

if(true){
    console.log(yes);
    let yes="yes";
}

这个就会报错 ReferenceError。

var 与 let 的第三个区别, var 在全局作用域中声明的变量会成为window对象的属性, 而 let 声明的变量不会

var name="chrome"
let name2= "ie"

console.log(window.name)   //chrome
console.log(window.name2)  //undefined

const 与 let 相似,作用域也是块级作用域,不同的地方是声明变量的同时必须将变量进行初始化,同时不同给该变量重新赋值,其实就是用来定义常量的。

const num = 4;
num = 6;

上面会报错,因为常量是不能被重新赋值的。

总结一点:优先使用const, let次之, 能不用var就不用var

JS中一共有7种数据类型,分别是Undefined, Boolean, String, Number, Null, Symbol 6个简单数据类型 和 Object 这个复杂数据类型。

typeof 操作符可用来检查变量属于何种类型

console.log(typeof 1); // number
console.log(typeof null); //object
console.log(typeof "hello"); //string
console.log(typeof undefined); //undefined
console.log(typeof true); // boolean
console.log(typeof {name: "tou"});  //object

Undefined 类型的数据就一个值叫 undefined, 当 用 var 或 let 声明的变量还没赋值时,这个变量的类型就是undefined

Null类型的值也只有一个null, 表示空对象, 通常如果变量是用于保存对象值时,初始化就可以用null赋值,等真正有了对象值时再重新赋值。

let car = null;
car = {weight:100};
if (null==undefined){
    //
}

undefined 与 null 的表面值是相等的,因为undefined 是从null派生而来的,但是二者的用途有着明显的不同, undefined 就是表示变量尚未初始化, 而null表示变量现在是空值,将来可以用其它对象填充。

Boolean 类型值有true和false, 其它任何类型的数据都可以通过函数 Boolean()转换为Boolean类型的true或者false,在 if 条件语句中,javascript会自动将该数据转换为对应的Boolean类型的值。

微信截图_20201127012728.png

Number类型分为整型和浮点型,和其它语言基本是一样的, Number类型中还有3个特殊的值, NaN ,Infinity, -Infinity ,后面两个好理解,无穷大和负无穷大。 NaN 表示“不是数”,"不是数"是个特殊数,比如 0/0,其它语言直接报错, 而在JavaScript中,他会返回NaN值.

console.log(0/0); //NaN
console.log(5/0);  //Infinity
console.log(-5/0);  //-Infinity

NaN 与任何值比较都不相等,即使与NaN比较也不相等

console.log(NaN==NaN) //false

判断一个值是否可以转换为数值类型可以用函数isNaN(), 返回false 就可以转换

console.log(isNaN("10")); // false , 可转换为10
console.log(isNaN("red")); // true 不是数值,不能转换
console.log(isNaN(true));  //false , 可转为1

将其它类型值转换为数值类型有三个函数, Number(), parseInt(),parseFloat()。 Number 函数可将任何类型的值转换为数值, 后两个主要是用于将字符串转为数值。

console.log(Number("red"));  //NaN
console.log(Number(true));  //1
console.log(Number(false));  //0
console.log(Number(""));   //0
console.log(Number("10"));  //10
console.log(Number(undefined));  //NaN
console.log(Number(null)); //NaN

对于对象,先调用对象的valueOf方法,如果是NaN,再调用对象的toString方法。

console.log(parseInt("12xxx"));   //12
console.log(parseInt(""));  //NaN

parseInt 默认按10进制转换, 也可以指定进制

console.log(parseInt("10", 2)) //2
console.log(parseInt("10", 8)) //8
console.log(parseInt("10", 10)) //10
console.log(parseInt("10", 16)) //16

String

javascript 中的字符串可以使用双引号(")、单引号(')或反引号(`)标示。

javascript中除了null和undefined之外的值都有一个toString()方法,可以将其转换为字符串。当你不确定变量是否为null或undefined的时候,又需要调用toString()方法时,怎么办?可以先调用 String()转型函数,将其装换为复杂数据类型Object

let a;
console.log(a.toString()); // 报错
console.log(String(a).toString());  //undefined

反引号组成的字符串主要用途是模板字面量,主要用在html模板中,例如:

let value = "world";

let content = `
    <html>
        <body>
            <div>
                hello  ${value}
            </div>
        </body>
    </html>
`

symbol

暂时不做了解

Object类型

let obj  = new Object();

Object 是其他所有对象的基类, 都有如下属性和方法

  • toString()
  • valueOf()
  • hasOwnProperty()
  • constructor
  • 逻辑与或非

等于与不等于 (==)与 (!=) 会先进行强制类型转换,再做相等性比较,例如:

console.log("22"==22) //true

全等与不全等(===)与(!==) 不会进行类型转换

console.log("33"===33);  //false

在做相等性判读时推荐使用后者。

do{
    console.log(i);
}
while(i++<10);

for in 语句,用于迭代变量中的元素,迭代的变量可以是任意对象,包括null 和 undefined。

for(const name in window){
    console.log(name);
}

for of 也是用于迭代,不过他是更为严格的迭代,变量必须是可迭代的,如果是null就不行。其实window也不是可迭代对象,所有也会报错,可迭代对象都必须有一个next()方法。

for(num of [1,2,3,3,4]){
    console.log(Math.pow(num, 2))
}

with 语句

将代码作用域设置为特定对象, 例如:

console.log(location.href);
console.log(location.hostname);
console.log(location.search.substring(1));

// 用with代替,

with(location){
    console.log(href);
    console.log(search.substring(1));
}

switch case 语句 用于替换大量的if else if 的场景

let i=0;

switch(i){
    case 1:
        console.log(i);
        break;
    default:
        console.log("other");
}

函数没有显式的return时,返回的是 undefined 对象。

有问题可以扫描二维码和我交流

关注公众号「Python之禅」,回复「1024」免费获取Python资源

python之禅

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK