JS基础知识

JS中的数据类型:

  • Number(数字)
  • String(字符串)
  • Boolean(布尔)
  • Object(对象)
  • Symbol(符号,ES2015 新增)
  • null(空)
  • undefined(未定义)

其中Object(对象)包括:

  • Function(函数)
  • Array(数组)
  • Date(日期)
  • RegExp(正则表达式)

1.Number
JavaScript 不区分整数值和浮点数值,所有数字均用浮点数值表示,在进行数字运算时要特别注意

0.1 + 0.2 = 0.30000000000000004

字符串转数字:

  • parseInt(),该函数的第二个可选参数表示字符串所表示数字的进制
parseInt("123", 10);   // 123
parseInt("11", 2);     // 3,表示该字符串所表示的数为2进制,转换为对应的十进制数为3

parseInt("hello", 10);     // NaN,若给定字符串不存在数值形式,函数会返回一个特殊的值NaN(Not a Number的缩写)
parseInt("23.2hello");     // 23

NaN + 5;        //NaN,NaN参与的数学运算,结果也会是 NaN
isNaN(NaN);     // true,判断一个变量是否为 NaN
  • 单元运算符 + 也可以把数字字符串转换成数值
 + "42";   // 42
  • parseFloat(),解析浮点数字符串(十进制数字)
parseFloat("23.2hello");    // 23.2

parseInt() 和 parseFloat() 函数会尝试逐个解析字符串中的字符,直到遇上一个无法被解析成数字的字符,然后返回该字符前所有数字字符组成的数字。然而如果使用运算符 “+”, 只要字符串中含有无法被解析成数字的字符,该字符串都将被转换成 NaN

2.字符串

"hello".length; // 5

"hello".charAt(0); // "h"
"hello, world".replace("world", "mars"); // "hello, mars"
"hello".toUpperCase(); // "HELLO"

"3" + 4 + 5;  // "345",一个字符串加上一个数字(或其他值),那么操作数都会被首先转换为字符串
'3'+4+true    // "34true"

3.布尔

  • false、0、空字符串("")、NaN、null 和 undefined 被转换为 false
  • 所有其他值被转换为 true

4.变量
声明一个变量的关键字:let 、const 和 var
如果声明了一个变量却没有对其赋值,那么这个变量的类型就是 undefined

  • let:声明一个块级作用域的本地变量(for循环,函数体)
  • var:申明一个局部变量,作用域类似于python
for(var a=0;a<3;a++){
       console.log(a);
   }
console.log(a);  // for循坏外部还可以继续访问和修改变量a

for(let a=0;a<3;a++){
       console.log(a);
   }
console.log(a);  // 此处报错,变量a只能在for循环代码块中访问


function Test() {
       var a = 10;    // 显示申明,定义在函数中的变量a,无法在函数外部访问
       let b = 20;
       c = 30;    // 隐式申明,在函数中没有用var关键字,使用直接赋值方式声明的是全局变量,可在外部访问和修改
   }
   Test();    // 调用函数,在函数中申明3个变量
   console.log(a);  // 访问出错
   console.log(b);  // 访问出错
   console.log(c);  // 可正常访问和修改
  • const:声明一个不可变的常量
const Pi = 3.14;    // 设置常量Pi的值  
Pi = 1;            // 此处尝试修改一个已定义的常量,将会抛出一个错误

5.等号操作
双等号组成的相等运算符有类型自适应的功能

123 == "123" // true
1 == true; // true
2==true;    //false

// 3等号则不进行类型转换
1 === true; //false
123 === "123"; // false

6.for循环
for in:key(索引或属性名) ,适合遍历对象
for of:遍历可迭代对象的value.

// 给所有对象和数组对象添加一个属性
Object.prototype.objCustom = function () {};
Array.prototype.arrCustom = function () {};

let iterable = [3, 5, 7];
iterable.foo = "hello";

// 遍历了列表中的索引以及列表对象的属性
for (let i in iterable) {
    console.log(i); //  0, 1, 2, "foo", "arrCustom", "objCustom"
}

// 仅遍历了列表中的值
for (let i of iterable) {
    console.log(i); // 3, 5, 7
}

7.对象
JavaScript 中的对象,Object,可以简单理解成“名称-值”对
“名称”部分是一个 JavaScript 字符串,“值”部分可以是任何 JavaScript 的数据类型——包括对象

  • 创建对象
// 创建一个空对象
var obj = new Object();
var obj = {};    // 优先使用

// 创建对象并访问属性
var obj = {
    name: "Carrot",
    details: {
        color: "orange",
        size: 12
    }
};
console.log(obj.details.color); // orange
console.log(obj["details"].size); // 12

8.数组

  • 创建数组
var a = ["dog", "cat", "hen"];
console.log(a.length); // 3
  • 数组的length属性:长度,通常比数组最大索引大 1。
var a = ["dog", "cat", "hen"];
a[100] = "fox";
console.log(a.length); // 101,数组的长度是比数组最大索引值多一的数

console.log(a[90]);    // undefined,访问一个不存在的数组索引,会得到 undefined
  • 数组的遍历
   var a = ["dog", "cat", "hen"];

   // 通过索引遍历
   for (let i = 0; i < a.length; i++) {
       console.log(a[i]);
   }
   // 不推荐这种方式,会同时遍历出数组对象额外的属性
   for (let i in a) {
       console.log(a[i]);
   }

   // for of  遍历可迭代对象
   for (let i of a) {
       console.log(i);
   }

   // forEach()方法
   a.forEach(function (value,index,array) {
       console.log(value);
       console.log(array[index]);
   })
  • 其他方法
a.push(item);        // 追加元素,可同时追加多个,返回插入后的数组长度
a.unshift(item)    // 将 item 插入数组头部,返回数组新长度
a.pop()    // 删除并返回数组中的最后一个元素
a.shift()    // 删除并返回数组中第一个元素

a.join(sep)    // 返回一个包含数组中所有元素的字符串,每个元素通过指定的 sep 分隔
a.toString()    // 返回一个包含数组中所有元素的字符串,每个元素通过逗号分隔
a.reverse()    // 数组逆序(会更改原数组 a)
a.slice(start, end)    // 切片
a.sort([cmpfn])    // 依据可选的比较函数 cmpfn 进行排序,若未指定比较函数,则按字符顺序比较

9.函数
如果没有使用 return 语句,或者一个没有值的 return 语句,JavaScript 会返回 undefined。
如果调用函数时没有传入足够的参数,缺少的参数会被 undefined 替代。

function add(x, y) {
        var total = x + y;
        return total;
    }

add();    // NaN,未传入参数,x和y被替换为undefined,
  • 关于传参
    调用函数时,多传或少传参数时都不会报错,多余的参数将不被使用,未传入的参数则被undefined替代;
    函数内部实际上是访问了一个名为 arguments 的内部对象,这个对象类似于一个数组对象,包括了所有被传入的参数。
function add() {
       var sum = 0;
       for (var i = 0, j = arguments.length; i < j; i++) {
           sum += arguments[i];
       }
       for(let v of arguments){
           console.log(v);    // 2,3,4,5
       }
       return sum;
   }
   
add(2, 3, 4, 5); // 14
  • 定义缺省参数
function add(a,b,c) {
    // 通过判断参数是否为undefined的方式来给到默认值
   if (c == undefined){
       c = 10;
   }

   return a + b + c;
}
console.log(add(2, 3)); // 15
  • 自定义对象
// 申明一个构造方法
function Person(first, last) {
   this.first = first;
   this.last = last;
}

// 给所有的Person对象添加一个属性
Person.prototype.fullName = function() {
   return this.first + ' ' + this.last;
};

var p = new Person('Master','Sun');
p.fullName();    // Master Sun

参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/A_re-introduction_to_JavaScript

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值