资讯专栏INFORMATION COLUMN

JavaScript基础

vspiders / 1796人阅读

摘要:基础标识符所谓的标识符就是指变量函数属性的名字,或者函数的参数。原始数组不会被改变。删除或替换现有元素来修改数组并以数组形式返回被修改的内容。否则返回返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回。

Javascript基础 标识符

所谓的标识符,就是指变量、函数、属性的名字,或者函数的参数。标识符主要有以下规则:

首字符必须是字母、下划线_或者美元符$

其他字符可以是字母、下划线_、美元符$或者数字

标识符的命名遵循驼峰命名,即myCar

var操作符定义的变量将成为定义该变量的作用域中的局部变量.也就是说,如果在函数中使用var定义一个变量,那么这个变量在函数退出后就会被销毁,如:

function test() {
  var message = "hi";
}
test();
console.log(message); //错误

a = 5 // 省略var操作符,创建的是一个全局变量
javascript数据类型

基本数据类型: number, string, boolean, undefined, symbol, null

复杂数据类型: object (三种引用类型: function, arrary, object)

特殊值: NaN, undefined, null

NaN有以下两个特点:

1.任何涉及NaN的操作都会返回NaN,包括NaN/0 // NaN.

2.NaN与任何值都不相等,包括NaN本身,NaN==NaN // false.

鉴于上面两点,判断一个变量是否是NaN需要使用javascript提供的isNaN()方法,例: NaN.isNaN() // true

undefined声明但是没有初始化的变量的值即为undefined,可以理解为此处应该有一个值,但是实际上没有,我们给它一个默认值undefined

// 声明的变量
var a; //相当于var a=undefined;
console.log(typeof a); //undefiend

// 注意一下未声明的变量会直接报错的
console.log(b); //!报错 b is not defined

null是表示缺少的标识,指示变量未指向任何对象,如果定义的变量准备在将来用于保存对象时,那么最好将变量初始化为null

typeof操作符返回一个字符串,表示未经计算的操作数的类型
let s = Symbol
typeof 5 ---------> number
typeof NaN -------> number
typeof "a" -------> string
typeof true ------> boolean
typeof undefined -> undefined
typeof s ---------> symbol

let fn = function() {}
typeof null ------> object
typeof [] --------> object
typeof {} --------> object
typeof fn --------> function
instanceof运算符用于测试构造函数的prototype属性是否出现在对象的原型链中的任何位置

基本类型使用字面量赋值,使用instanceof并不能判断其变量类型,因为字面量就是我们所见到的字符,没有调用构造函数,也就不能在原型上找到

let a = 5
a instanceof Number // false

let b = false
b instanceof Boolean // false

let c = Symbol
c instanceof Symbol // false

但是复杂类型使用字面量赋值时,往往能判断其变量类型,这是因为在js中根本不存在真正的空对象,即使是最简单的{}对象也会包含从Object.prototype继承而来的属性和方法

let obj = {}
obj instanceof Object // true
[] instanceof Array // true

// 注意
null instanceof Object // false
javascript常用方法

所有的对象都有toLoacleString(),toString(),valueOf()

# 1.Number
    number.isNaN() // 判断是否是NaN
    number.toFixed(2) // 保留小数点后两位
    number.toString() // 将数字转换成字符串
    
    Number可以配合Math对象来使用
    Math.random() // 随机取0-1的数
    Math.abs(number) // 取绝对值
    Math.round(number) // 四舍五入
    Math.floor(number) // 向下取整
    Math.ceil(number) // 向上取整
    
# 2.String
    string.replace(searchValue, replaceValue) // 找到searchValue,只会在第一次的时候换成replaceValue,searchValue可以是正则表达式
    "abcda".replace("a", "b") // "bbcda"
    "abcda".replace(/a/g,"b") // "bbcdb"
    
    string.slice(start, end) // 从索引start到end的字符串,end可以为负数,负数表示倒数 
    "abcd".slice(0,3) //"abc"
    "abcd".slice(0,-1) //"abc"
    
    string.split(".") // 以.分割字符串,结果为一个数组[] 
    "192.168.1.0".split(".") // ["192", "168", "1", "0"]
    
# 3.Array
    Array.isArray(arr) // 检测数组 true/false
    
    arr.concat() 方法用于连接两个或多个数组
    array.join(".") // 将数组的每一项转换成字符串,并用.连接
    ["192", "168", "1", "0"].join(".") // "192.168.1.0"
    
    let arr = [1, 2, 3, 4] // 以下arr默认都是 [1, 2, 3, 4] 后进先出叫栈,先进先出叫堆
    
    arr.slice(0,2) //[1,2] 返回一个新的数组对象,这一对象是一个由 begin和 end(不包括end)决定的原数组的浅拷贝。原始数组不会被改变。
    
    arr.splice(start, number, addItem) // 删除或替换现有元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。
    arr.splice(0, 2, 3) // [3, 3, 4] // 从索引为0的位置删除两项(1,2),并插入一项(3)
    
    // 栈方法
    arr.unshift(0) // arr变成了[0, 1, 2, 3, 4],  修改数组长度,将0放到了数组的第一项
    arr.pop() // 3 修改数组长度,移除数组的最后一项并返回 arr变成了[1, 2, 3]
    
    // 堆方法
    arr.shift() // 1 修改数组长度,数组的第一项并返回 arr变成了[2, 3, 4]
    arr.push(5) // arr变成了[1, 2, 3, 4, 5], 修改数组长度,将5放到了数组的最后一项
    
    // 重排序
    arr.sort() // 首字符排列
    arr.sort((a,b) => a-b) // a-b从小到大, b-a从大到小
    
    arr.reverse() // 顺序颠倒
    
    arr.filter(item => item >= 2) // [3, 4], 过滤数组元素生产新的数组,,不改变原数组
    
    // react 常用
    arr.map(item => item+1 ) //[2, 3, 4, 5] 对数组中的每个元素进行处理,得到新的数组,不改变原数组
    arr.map((item,index) => 
{item}
) //react中常用, jsx语法 arr.findIndex(item => item > 2) //2 返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1 arr.indexOf(item => item === 1) //0 返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。

更多方法请参考: MDN

javascript语法

==/!=先转换再比较(强制转型) ===/!==仅比较不转换

null == undefined; //true 它们是类似的值
null === undefined; //false 它们是不同类型的值

条件操作符又称三元运算符

let max = (num1>num2) ? num1 : num2

当判断一个范围时请使用if语句

var scroe = 80
if(scroe >= 90) {
    console.log("成绩为优");
}else if(scroe >= 80) {
    console.log("成绩为良")
}else if(scroe >= 60) {
    console.log("成绩为及格")
}else {
    console.log("成绩为不及格");
}

在对比有限个值时,值不能太多,一般在1-4之间,使用switch语句

switch(m) {
    case x:
        //语句
        break;
    case y: 
        //语句
        break;
    default:
        //语句
        break;
}

循环次数已知,选择for循环

for(初始化条件表达式;条件表达式;条件改变表达式) {
    //循环体
}

循环次数未知,但是循环结束条件已知选择while语句

while(条件表达式) {
    //循环体
}

循环体至少执行一次时,选择do while语句 例如:要先考试才能知道是否及格

do{
    //循环体
}while(条件表达式)

var score = 48;
do {
    console.log("没及格,需要再来考试!");
    score += 15;
} while (score < 60);

break 直接跳出循环

var num = 0;
for (var i = 1; i < 10; i++) {
    if (i % 5 == 0) {
        break;
    }
    num++;
}
console.log(num); //4 当i=4时,num=4,再执行循环i=5,跳出循环,下面的num++并没有执行,此时num还是4;

continue 跳出本次循环,继续执行下面的循环

var num = 0;
for (var i = 1; i < 10; i++) {
    if (i % 5 == 0) {
        continue;
    }
    num++;
}
console.log(num); //当i=4和9时,跳过了num++,循环完成时num=8;

// 函数执行完之后会立即销毁!!!
function sum(num1, num2) {
    return num1 + num2; //函数是否需要返回值是要看我们是否需要用到函数的返回值
}

function hello() {//函数在执行完return之后会立即退出
    return;
    console.log("你好,世界!"); //这段语句不会执行
} 

函数声明:函数声明整体提升,函数表达式/变量声明:函数表达式命名提升

function test(a,b) {
   console.log(a)  
   console.log(b) 
   var b = 234
   console.log(b)  
   a = 123
   console.log(a) 
   function a() {}
   var a
   b = 234
   var b = function () {}
   console.log(a)
   function b () {}
   console.log(b)
}
test(1) // 打印结果为 fn a, fn b, 234, 123, 234, fn

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/109014.html

相关文章

  • 基础巩固:JavaScript基础总结(基本概念篇)

    摘要:基础巩固基础总结使用已经好几年了,由于工作主要是做服务端开发,在工作中逐渐发现的使用范围原来越广泛。这里要注意,务必将基础部分掌握牢靠,磨刀不误砍柴功,只有将基础部分掌握并建立起系统的知识体系,在后面学习衍生的其他模式才能游刃有余。 基础巩固:JavaScript基础总结 使用JavaScript已经好几年了,由于工作主要是做服务端开发,在工作中逐渐发现JavaScript的使用范围原...

    YuboonaZhang 评论0 收藏0
  • 那些年,我的前端/Java后端书单

    摘要:全文为这些年,我曾阅读深入理解过或正在阅读学习即将阅读的一些优秀经典前端后端书籍。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。 全文为这些年,我曾阅读、深入理解过(或正在阅读学习、即将阅读)的一些优秀经典前端/Java后端书籍。全文为纯原创,且将持续更新,未经许可,不得进行转载。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。 基础 基础书籍 进阶 进阶阶段,深入学习的书...

    fxp 评论0 收藏0
  • 那些年,我的前端/Java后端书单

    摘要:全文为这些年,我曾阅读深入理解过或正在阅读学习即将阅读的一些优秀经典前端后端书籍。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。 全文为这些年,我曾阅读、深入理解过(或正在阅读学习、即将阅读)的一些优秀经典前端/Java后端书籍。全文为纯原创,且将持续更新,未经许可,不得进行转载。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。 基础 基础书籍 进阶 进阶阶段,深入学习的书...

    Tecode 评论0 收藏0
  • 那些年,我的前端/Java后端书单

    摘要:全文为这些年,我曾阅读深入理解过或正在阅读学习即将阅读的一些优秀经典前端后端书籍。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。 全文为这些年,我曾阅读、深入理解过(或正在阅读学习、即将阅读)的一些优秀经典前端/Java后端书籍。全文为纯原创,且将持续更新,未经许可,不得进行转载。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。 基础 基础书籍 进阶 进阶阶段,深入学习的书...

    VPointer 评论0 收藏0
  • 那些年,我的前端/Java后端书单

    摘要:全文为这些年,我曾阅读深入理解过或正在阅读学习即将阅读的一些优秀经典前端后端书籍。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。 全文为这些年,我曾阅读、深入理解过(或正在阅读学习、即将阅读)的一些优秀经典前端/Java后端书籍。全文为纯原创,且将持续更新,未经许可,不得进行转载。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。 基础 基础书籍 进阶 进阶阶段,深入学习的书...

    idealcn 评论0 收藏0
  • 程序员练级攻略(2018):前端基础和底层原理

    摘要:下面我们从前端基础和底层原理开始讲起。对于和这三个对应于矢量图位图和图的渲染来说,给前端开发带来了重武器,很多小游戏也因此蓬勃发展。这篇文章受众之大,后来被人重新整理并发布为,其中还包括中文版。 showImg(https://segmentfault.com/img/bVbjM5r?w=1142&h=640); 想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! 这...

    widuu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<