zoukankan      html  css  js  c++  java
  • JS的基本概念和数据类型

    什么是 JavaScript 语言

    JavaScript 是一种轻量级的脚本语言。所谓“脚本语言”,指的是它不具备开发操作系统的能力,而是只用来编写控制其他大型应用程序(比如浏览器)的“脚本”,本身不提供任何的 API,都要靠宿主环境(host)提供,所以 JavaScript 只合适嵌入更大型的应用程序环境,去调用宿主环境提供的底层 API。

    JavaScript 的核心语法部分相当精简,只包括两个部分:基本的语法构造(比如操作符、控制结构、语句)和标准库(就是一系列具有各种功能的对象比如Array、Date、Math等)。除此之外,各种宿主环境提供额外的 API(即只能在该环境使用的接口),以便 JavaScript 调用。以浏览器为例,它提供的额外 API 可以分成三大类。

    • 浏览器控制类:操作浏览器
    • DOM 类:操作网页的各种元素
    • Web 类:实现互联网的各种功能

    JavaScript 与 Java 的关系

    JavaScript 和 Java 的关系。它们是两种不一样的语言,但是彼此存在联系。JavaScript 的基本语法和对象体系,是模仿 Java 而设计的。但是,JavaScript 没有采用 Java 的静态类型。”。JavaScript 语言的函数是一种独立的数据类型,以及采用基于原型对象(prototype)的继承链。这是它与 Java 语法最大的两点区别。另外,Java 语言需要编译,而 JavaScript 语言则是运行时由解释器直接执行。

    基本概念

    语句

    javascript以行为单位执行

    语句是为了完成某种任务而进行的操作,如
    var a = 1 + 3;

    表达式

     6+ 3就叫做表达式

    语句与表达式的区别

    前者主要为了进行某种操作,一般不需要返回值

    后者是为了得到返回值,一定会返回一个值

    变量

    变量是对值的引用,使用变量等同于引用一个值
    var a = 1
    实际步骤是
    var a;
    a= 1;

    变量提升

    由于js引擎的工作方式,先解析代码获取所有被声明的变量,然后再一行一行的执行,这样就造成了,所有变量的声明语句,都会被提升到代码的头部,这就是变量提升

    标识符

    变量名就是最常见的标识符,规则如:

    第一个字符,可以是任意Unicode字母(包括英文字母和其他语言的字母),以及美元符号($)和下划线(_)。

    第二个字符及后面的字符,除了Unicode字母、美元符号和下划线,还可以用数字0-9。

    注意点

    • JavaScript 的变量名区分大小写,A和a是两个不同的变量。
    • 变量的声明和赋值,是分开的两个步骤, 如果只是声明变量而没有赋值,则该变量的值是undefined。undefined是一个特殊的值,表示“无定义”。
    • 可以在同一条var命令中声明多个变量
    • JavaScript 是一种动态类型语言,也就是说,变量的类型没有限制,变量可以随时更改类型
    • 单行注释 //,多行 /* */ 之间
    • 三元运算符? :,可以用于逻辑判断。(条件) ? 表达式1 : 表达式2上面代码中,如果“条件”为true,则返回“表达式1”的值,否则返回“表达式2”的值。

    数据类型

    概述

      JavaScript 语言的每一个值,都属于某一种数据类型,共有六种.

    • 数值(number):整数和小数(比如1和3.14)
    • 字符串(string):字符组成的文本(比如"Hello World")
    • 布尔值(boolean):true(真)和false(假)两个特定值
    • undefined:表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值
    • null:表示无值,即此处的值就是“无”的状态。
    • 对象(object):各种值组成的集合

      其中数值,字符串,布尔值成为原始类型的值,undefined和null一般被视为特殊值,对象则为合成类型的值,往往由多个原始类型的值合成

    typeof运算符

    JavaScript有三种方法,可以确定一个值到底是什么类型。

    • typeof运算符
    • instanceof运算符
    • Object.prototype.toString方法

    typeof运算符可以返回一个值的数据类型,可能有以下结果:

    (1)原始类型

    数值、字符串、布尔值分别返回number、string、boolean。

    (2)函数

    函数返回function,虽然函数属于对象,但是typeof内部是将函数是返回function

    (3)undefined

    undefined返回undefined

    (4)其他返回object

    数组的类型也是object,这表示在JavaScript内部,数组本质上只是一种特殊的对象。
    可以用instanceof运算符进行区分

    一些特殊数值

    NAN

     1)含义

    NaN是 JavaScript 的特殊值,表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合。

    5 - 'x' // NaN

    上面代码运行时,会自动将字符串x转为数值,但是由于x不是数值,所以最后得到结果为NaN,表示它是“非数字”(NaN)。

    另外,一些数学函数的运算结果会出现NaN。

    Math.acos(2) // NaN

    Math.log(-1) // NaN

    Math.sqrt(-1) // NaN

    0除以0也会得到NaN。

    0 / 0 // NaN

    需要注意的是,NaN不是独立的数据类型,而是一个特殊数值,它的数据类型依然属于Number,使用typeof运算符可以看得很清楚。

    typeof NaN // 'number'

    (2)运算规则

    NaN不等于任何值,包括它本身。

    NaN === NaN // false

    数组的indexOf方法内部使用的是严格相等运算符,所以该方法对NaN不成立。

    [NaN].indexOf(NaN) // -1

    NaN在布尔运算时被当作false。

    Boolean(NaN) // false

    NaN与任何数(包括它自己)的运算,得到的都是NaN。

    Infinity

    (1)含义

    Infinity表示“无穷”,用来表示两种场景。一种是一个正的数值太大,或一个负的数值太小,无法表示;另一种是非0数值除以0,得到Infinity。

    第一个场景是一个表达式的计算结果太大,超出了能够表示的范围,因此返回Infinity。第二个场景是0除以0会得到NaN,而非0数值除以0,会返回Infinity。

    Infinity有正负之分,Infinity表示正的无穷,-Infinity表示负的无穷。

    非零正数除以-0,会得到-Infinity,负数除以-0,会得到Infinity。

    由于数值正向溢出(overflow)、负向溢出(underflow)和被0除,JavaScript 都不报错,所以单纯的数学运算几乎没有可能抛出错误。

    Infinity大于一切数值(除了NaN),-Infinity小于一切数值(除了NaN)。

    Infinity与NaN进行比较,总是返回false。

    (2)运算规则

    Infinity的四则运算,符合无穷的数学计算规则。

    0乘以Infinity,返回NaN;0除以Infinity,返回0;Infinity除以0,返回Infinity。

    Infinity加上或乘以Infinity,返回的还是Infinity。

    Infinity减去或除以Infinity,得到NaN。

    Infinity与null计算时,null会转成0,等同于与0的计算。

    Infinity与undefined计算,返回的都是NaN。

    布尔值

    布尔值:true/false

    下列运算符会返回布尔值:

    • 二元逻辑运算符: &&(and), ||(or)
    • 前置逻辑运算符: !(not)
    • 相等运算符: ===, !==, !=
    • 比较运算符: > ,>= ,< ,<=

    下面这些值如果转化为布尔值则为false,其他都为true

    • undefined
    • null
    • 0
    • NaN
    • '' ''/' ' (空字符串)

    空数组( [] )和空对象( {} )转化为布尔值为true

     数据类型转换

     转为字符串:使用 .toString或者String。

    1、 .toString()方法:注意,不可以转null和underfined

        //转为字符串-->toString方法

        var bool=true;

        console.log(bool.toString());

        //注意,toString不能转null和underfined.

    2、String()方法:都能转

    console.log(String(null));

    3、隐式转换:num  +  "",当 + 两边一个操作符是字符串类型,一个操作符是其它类型的时候,会先把其它类型转换成字符串再进行字符串拼接,返回字符串

        var a=true;

        var str= a+"";

        console.log('str');

    转为数值类型

    1、Number():Number()可以把任意值转换成数值,如果要转换的字符串中有一个不是数值的字符,返回NaN

    console.log(Number(true));

    2、parseInt():

        var a="12.3px";

        console.log(parseInt(a);

        //结果:12.3.  如果第一个字符是数字会解析知道遇到非数字结束.

        var a="abc2.3";

        console.log(parseInt(a);

        ////结果:返回NaN,如果第一个字符不是数字或者符号就返回NaN.

    3、parseFloat():   parseFloat()把字符串转换成浮点数,parseFloat()和parseInt非常相似,不同之处在与parseFloat会解析第一个. 遇到第二个.或者非数字结束如果解析的内容里只有整数,解析成整数。

    4、隐式转换:

        var str="123";

        var num=str-0;

        console.log(num);

        //结果为数值型;

    转换为Boolean():0  ''(空字符串) null undefined NaN 会转换成false  其它都会转换成true

    1、Boolean():

    console.log(Boolean(2));

    2、一些环境中

       var message;

        if(message){};

    3、隐式转换:!!

        var str="123";

        var bool=!!str;

        console.log(str);

  • 相关阅读:
    GTK+中的树状列表构件(GtkTreeView)
    [TOP]疯狂的投资
    多线程模式之MasterWorker模式
    一年读书总结
    Microsoft Visual Studio正忙解决办法
    使用vs自带的性能诊断工具
    C#中的扩展方法
    从委托、匿名方法到Lambda
    c#中的事件
    sqlserver中创建包含事务的存储过程
  • 原文地址:https://www.cnblogs.com/ZXH-null/p/12303833.html
Copyright © 2011-2022 走看看