By now, we know what lives in the global context and how we can use it in our source code. Let's see what else our script tangent is capable of and what syntax it understands. Let me start with the primitive types and operations we can perform on each of them. Null is used only in the query language. Let just skip it for now. The undefined type has to do with some rather important concepts, so let's pause here for a while. The thing is that once the enterprise supports both implicit and explicit variable declarations, so you don't have to, but you can declare variables explicitly just like this. What 1C does not support is the static typing, meaning that you cannot tell the platform what type of a variable you want these to be. What is the type of this variable done? Let's see. I'm at the break point and here is my variable value in the debugger. It's type is undefined. It's well-defined, it's just how the type is called. This type allows the single literal value that's also called undefined and gets to signed automatically whenever the variable of this type is created. If I ask the debugger to check this condition, true is the answer. We use this condition quiet a lot, mostly to check if the parameter is passed to the method. When we declare the parameter like this, it means that it can be skipped by the column procedure, in which case, the undefined value will be assigned to it. Then we can check this value and forward the execution depending on the result. Another example of using the undefined literal of the undefined type is when we call a method that calculates some of its parameters for us. We cannot call the procedure without declaring all the parameters first. This is what I get if I try, but I have nothing to fill them out with. This is what I want the procedure to do, so I just declare them like this, or like this, which is exactly the same thing. There are no errors anymore. This was the undefined type and it's one onto the literal. Next step, the number type. There's nothing too fancy or unusual about the number type. All two familiar stuff here already know, if you've ever written any code, you can use literals containing up to 38 digits and to decimal point. You can perform all math operations on your numbers. You can use brackets to change the standard operations either, and of course, you can compare you numbers like this. As easy as that. Next one, the string type. String literals have to be double-quoted. Please know that the single quotation marks won't do, for they are used for their date literals only. What you do you do if you need a double quotation mark inside of a string? Easy, you just double it down. This is how it will look like at the runtime. Sometimes you need to specify a multiline string. The most common way of doing these in one's enterprise is using the pipe symbol like this. This is the string at the runtime. We usually use this pipe notation when writing queries, like here for example. This is what we do when we need to combine or as we programmers say, concatenate several strings. We just add them to one another like this. This is the result at the runtime. We also can compare strings like this, which works according to the alphabetical sort order. This was our string type. Next up, the date type. To specify a date literal, we use these format. Please know that the literal is in the single quotation marks, not the double ones. At the runtime, this variable will get the date type, and here is its value. Literals of this type ignore anything of digits. You can add any other symbols as separators and it will work just fine. Internally, the platform represents the date as a number of seconds elapsed since 12:00 AM, January 1st, year 1 of the Common Era. It means that we can easily get away with things like this, which gives us the number of seconds between these two dates, or even this, which gives us the same time on the day before. Of course, we can compare our dates just like this. Moving on, Boolean type. Two literals, true and false are used in the source code as this, without any quotation marks or something. We'll use of this type results of logical expressions. We can use them in conditions or we can assign this result to a variable like so. This is how it looks like at the runtime. The last one, the type, type. The type that's called type, however weird it may sound, anyway. The thing is that as we already saw, we cannot define the variable type explicitly. The variable gets typed as soon as a value of that always has some specific type is assigned to it.One can even say that variables in ones enterprise have no types, only values do. I can put anything in here. I need a way of telling what the type or its current value is. Here is how we do this. If we get back to the global context, I will see these type and type all functions, both returning the type typed value. This is how they work. I can ask the type of function what type this variable has, and this is what I will see. As for the type function, it returns the type given the tapes name, like this. Why do we need it? This is why. The thing is that there are no literals of the type type. We use these type function with the name of the type to compare another type with it. Of course, we can use not only primitive type names here, but any other type known to the platform, including the metadata object related types. These were our primitive types.